OmniWatchGuard logoOmniWatchGuard

API Documentation

REST API for managing monitors and reading notifications, with an API key created in the dashboard. Monitor, interval and channel limits are those of your plan.

REST APIJSONBearer Token

Authentication

All requests need the Authorization: Bearer header. You can use an API key (recommended, see the section below) or the session token returned by login. If two-factor authentication is enabled, login also asks for the code, so use an API key for scripts.

Header
Authorization: Bearer <token>
curl - Login
curl -X POST https://omniwatchguard.com/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "email@example.com", "password": "your_password"}'
Response
{"token": "eyJhbGciOiJIUzI1NiJ9...", "user": {"id": 1, "plan": "pro"}}

API keys

Keys are created in the dashboard under API Keys. A key starts with owg_live_ and is shown only once, when created. You can have at most 5 keys per account.

Header
Authorization: Bearer owg_live_...

API keys work on the /api/monitors endpoints (including /api/monitors/ID and /api/monitors/changes) and on /api/notifications. Other endpoints, including /api/export, accept only the session token from login.

GET/api/monitors

Returns the list of all active monitors for your account.

curl
curl https://omniwatchguard.com/api/monitors \
  -H "Authorization: Bearer <token>"
JavaScript
const res = await fetch("https://omniwatchguard.com/api/monitors", {
  headers: { Authorization: `Bearer ${token}` }
});
const monitors = await res.json();
Response
[{"id": 1, "url": "https://example.com", "name": "Test monitor",
  "type": "text", "frequency": 60, "status": "active",
  "notify_email": 1, "notify_slack": null, "created_at": "2026-03-01T12:00:00Z"}]
POST/api/monitors

Creates a new monitor.

ParameterTypeRequiredDescription
urlstringYesURL of the page to monitor
namestringNoMonitor name
typestringNotext | price | stock | css | api | seo | ssl; with a paid add-on: tech_stack | whois
frequencyintegerNoMinutes. Starter and Trial: 60. Pro: 15, 30, 60. Agency: 5, 15, 30, 60. Default 60; a value not in your plan is replaced with 60.
notify_emailintegerNo1 = active, 0 = inactive
notify_slackstringNoSlack webhook URL
notify_discordstringNoDiscord webhook URL
notify_telegramstringNoTelegram Chat ID
notify_webhookstringNoCustom webhook URL
selectorstringNoCSS selector, for the css type
auth_cookiestringNoSession cookie or token for login-protected pages (Agency plan)
curl
curl -X POST https://omniwatchguard.com/api/monitors \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/prices", "type": "price", "frequency": 15}'
Response
{"success": true, "id": 42}
PATCH/api/monitors/{id}

Updates an existing monitor. Send only the fields you want to change.

curl
curl -X PATCH https://omniwatchguard.com/api/monitors/42 \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"frequency": 5, "notify_slack": "https://hooks.slack.com/..."}'
Response
{"success": true}
DELETE/api/monitors/{id}

Deletes a monitor. This action is irreversible.

curl
curl -X DELETE https://omniwatchguard.com/api/monitors/42 \
  -H "Authorization: Bearer <token>"
Response
{"success": true}
GET/api/monitors/changes

Returns the latest detected changes. Optional parameter: ?limit=20 (default 10, max 50).

curl
curl "https://omniwatchguard.com/api/monitors/changes?limit=20" \
  -H "Authorization: Bearer <token>"
Response
[{"id": 1, "url": "https://example.com", "name": "Monitor test", "type": "price",
  "ai_summary": "Price dropped from $99 to $79.",
  "ai_severity": "major", "detected_at": "2026-03-24T09:15:00Z"}]
GET/api/export

Exports data in CSV format. Parameters: type=monitors|incidents, optional monitor_id. This endpoint accepts only the session token from login, not API keys.

curl - Export monitors
curl "https://omniwatchguard.com/api/export?type=monitors" \
  -H "Authorization: Bearer <token>" -o monitors.csv
curl - Export incidents
curl "https://omniwatchguard.com/api/export?type=incidents&monitor_id=42" \
  -H "Authorization: Bearer <token>" -o incidents.csv
GET/api/notifications

Returns the last 100 sent notifications. Optional parameter: ?type=email|slack|discord|telegram|webhook.

curl
curl https://omniwatchguard.com/api/notifications \
  -H "Authorization: Bearer <token>"
Response
[{"id": 1, "type": "email", "success": 1, "error": null,
  "sent_at": "2026-03-24T09:15:00Z", "url": "https://example.com"}]

Error codes

HTTP CodeMeaning
200Success
201Monitor created
400Invalid request
401Unauthorized - token missing or expired
403Forbidden - monitor limit reached, or channel or interval not included in your plan
404Resource not found
429Too many requests - see the Retry-After header
500Internal server error
Error format
{"error": "Error description"}

Limits

PlanMonitorsIntervals (minutes)Alert channels
Trial360email, webhook, Slack, Discord, Telegram
Starter1060email
Pro10015, 30, 60email, webhook, Slack
Agencyunlimited5, 15, 30, 60email, webhook, Slack, Discord, Telegram

The /api/monitors and /api/notifications endpoints have no general request limit. These are limited per IP address: POST /api/auth/login to 10 requests per 15 minutes and POST /api/monitors/preview to 20 requests per hour. When a limit is exceeded you get 429 with the Retry-After header (seconds).

⚡ Zapier & Make Integration

OmniWatchGuard connects to Zapier, Make (Integromat) and other automation platforms through a Custom Webhook (Pro and Agency plans). You paste the webhook URL when creating the monitor.

⚡

Zapier

5000+ apps

Connect OmniWatchGuard alerts with Gmail, Slack, Google Sheets, Notion, Airtable, Trello and 5000+ other apps.

1
Create a new Zap

In Zapier, choose Trigger: Webhooks by Zapier → Catch Hook

2
Copy the webhook URL

Zapier generates a URL like https://hooks.zapier.com/hooks/catch/...

3
Add to OmniWatchGuard

When creating a monitor, in the Custom Webhook section, paste the Zapier URL.

4
Test and activate

Wait for the first detection or test from dashboard. Zapier receives data automatically.

🔄

Make (Integromat)

1500+ apps

Automate complex workflows with Make - send alerts to WhatsApp, update spreadsheets, create Jira tickets or notify your team.

1
Create a new Scenario

In Make, add a Webhooks → Custom Webhook module as trigger.

2
Copy the URL

Make generates a URL like https://hook.eu1.make.com/...

3
Add to OmniWatchGuard

When creating a monitor, in the Custom Webhook section, paste the Make URL.

4
Determine structure

Send a test - Make automatically detects the JSON structure and makes it available in your scenario.

Popular automation examples

📈Competitor price monitoring

When price drops - Slack notification + record in Google Sheets

🛒Stock alert

When back in stock - automatic email to customers or SMS via Twilio

📝Content monitoring

When competitor page changes - new task in Trello or Notion

🔒SSL alert

When SSL expires in 14 days - automatic ticket in Jira + email to dev team

🔍SEO Monitor

When title or meta description changes - notification in Microsoft Teams

📊Automatic reporting

On any change - record in Airtable for weekly reports

Webhook Payload

On every major or critical change, OmniWatchGuard sends a POST request with Content-Type: application/json to your URL. Minor changes are only recorded in the dashboard.

JSON Payload - Change detected
{
  "event": "change_detected",
  "monitor_id": 42,
  "monitor_name": "Competitor A prices",
  "url": "https://competitor.com/product",
  "type": "price",
  "summary": "Price dropped from 149.99 to 129.99 (-13%)",
  "severity": "major",
  "detected_at": "2026-04-29T10:23:45.000Z"
}
JSON Payload - SSL expiry warning
{
  "event": "ssl_expiry_warning",
  "monitor_id": 15,
  "monitor_name": "SSL Monitor - site.com",
  "url": "https://site.com",
  "hostname": "site.com",
  "ssl_days_left": 12,
  "ssl_expires_at": "2026-05-11T00:00:00.000Z",
  "ssl_issuer": "Lets Encrypt",
  "ssl_error": null,
  "detected_at": "2026-04-29T06:00:00.000Z"
}

Available fields

FieldTypeDescription
eventstringchange_detected or ssl_expiry_warning
monitor_idintegerMonitor ID in OmniWatchGuard
monitor_namestringName given to the monitor
urlstringMonitored URL
typestringMonitor type: text, price, stock, seo, ssl, css, api
summarystringAI summary of the detected change
severitystringminor, major or critical
detected_atstringDetection date and time in ISO 8601 format
💡
Tip for Zapier/Make

Use the severity field as a filter - send email only if severity = critical. In Make you can build complex conditional logic based on type and severity.

⚡Try free for 24h
OWG
OmniWatchGuard
Online · Replies instantly