kopia lustrzana https://github.com/dgtlmoon/changedetection.io
1266 wiersze
40 KiB
YAML
1266 wiersze
40 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: ChangeDetection.io API
|
|
description: |
|
|
# ChangeDetection.io Web page monitoring and notifications API
|
|
|
|
REST API for managing Page watches, Group tags, and Notifications.
|
|
|
|
changedetection.io can be driven by its built in simple API, in the examples below you will also find `curl` command line examples to help you.
|
|
|
|
## Where to find my API key?
|
|
|
|
The API key can be easily found under the **SETTINGS** then **API** tab of changedetection.io dashboard.
|
|
Simply click the API key to automatically copy it to your clipboard.
|
|
|
|

|
|
|
|
## Connection URL
|
|
|
|
The API can be found at `/api/v1/`, so for example if you run changedetection.io locally on port 5000, then URL would be `http://localhost:5000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/history`.
|
|
|
|
If you are using the hosted/subscription version of changedetection.io, then the URL is based on your login URL, for example:
|
|
`https://<your login url>/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/history`
|
|
|
|
## Authentication
|
|
|
|
Almost all API requests require some authentication, this is provided as an **API Key** in the header of the HTTP request.
|
|
|
|
For example: `x-api-key: YOUR_API_KEY`
|
|
|
|
version: 1.0.0
|
|
contact:
|
|
name: ChangeDetection.io
|
|
url: https://github.com/dgtlmoon/changedetection.io
|
|
license:
|
|
name: Apache 2.0
|
|
url: https://www.apache.org/licenses/LICENSE-2.0.html
|
|
|
|
servers:
|
|
- url: http://localhost:5000/api/v1
|
|
description: Development server
|
|
- url: https://yourdomain.com/api/v1
|
|
description: Production server
|
|
- url: '{protocol}://{host}/api/v1'
|
|
description: Custom server
|
|
variables:
|
|
protocol:
|
|
enum:
|
|
- http
|
|
- https
|
|
default: https
|
|
host:
|
|
default: yourdomain.com
|
|
description: Your changedetection.io host
|
|
|
|
security:
|
|
- ApiKeyAuth: []
|
|
|
|
tags:
|
|
- name: Watch Management
|
|
description: |
|
|
Core functionality for managing web page monitors. Create, retrieve, update, and delete individual watches.
|
|
Each watch represents a single URL being monitored for changes, with configurable settings for check intervals,
|
|
notification preferences, and content filtering options.
|
|
|
|
- name: Watch History
|
|
description: |
|
|
Access historical snapshots and change data for your watches. View the complete timeline of detected changes
|
|
and retrieve specific versions of monitored content for comparison and analysis.
|
|
|
|
- name: Snapshots
|
|
description: |
|
|
Retrieve individual snapshots of monitored content. Access both the processed change detection data and
|
|
the raw HTML content that was captured during monitoring checks.
|
|
|
|
- name: Favicon
|
|
description: |
|
|
Retrieve favicon images associated with monitored web pages. These are used in the dashboard interface
|
|
to visually identify different watches in your monitoring list.
|
|
|
|
- name: Group / Tag Management
|
|
description: |
|
|
Organize your watches using tags and groups. Tags (also known as Groups) allow you to categorize monitors, set group-wide
|
|
notification preferences, and perform bulk operations like mass rechecking or status changes across
|
|
multiple related watches.
|
|
|
|
- name: Notifications
|
|
description: |
|
|
Configure global notification endpoints that can be used across all your watches. Supports various
|
|
notification services including email, Discord, Slack, webhooks, and many other popular platforms.
|
|
These settings serve as defaults that can be overridden at the individual watch or tag level.
|
|
|
|
- name: Search
|
|
description: |
|
|
Search and filter your watches by URL patterns, titles, or tags. Useful for quickly finding specific
|
|
monitors in large collections or identifying watches that match certain criteria.
|
|
|
|
- name: Import
|
|
description: |
|
|
Bulk import multiple URLs for monitoring. Accepts plain text lists of URLs and can automatically
|
|
apply tags, proxy settings, and other configurations to all imported watches simultaneously.
|
|
|
|
- name: System Information
|
|
description: |
|
|
Retrieve system status and statistics about your changedetection.io instance, including total watch
|
|
counts, uptime information, and version details.
|
|
|
|
components:
|
|
securitySchemes:
|
|
ApiKeyAuth:
|
|
type: apiKey
|
|
in: header
|
|
name: x-api-key
|
|
description: |
|
|
API key for authentication. You can find your API key in the changedetection.io dashboard under Settings > API.
|
|
|
|
Enter your API key in the "Authorize" button above to automatically populate all code examples.
|
|
|
|
schemas:
|
|
Watch:
|
|
type: object
|
|
properties:
|
|
uuid:
|
|
type: string
|
|
format: uuid
|
|
description: Unique identifier for the watch
|
|
readOnly: true
|
|
url:
|
|
type: string
|
|
format: uri
|
|
description: URL to monitor for changes
|
|
maxLength: 5000
|
|
title:
|
|
type: string
|
|
description: Custom title for the watch
|
|
maxLength: 5000
|
|
tag:
|
|
type: string
|
|
description: Tag UUID to associate with this watch
|
|
maxLength: 5000
|
|
tags:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: Array of tag UUIDs
|
|
paused:
|
|
type: boolean
|
|
description: Whether the watch is paused
|
|
muted:
|
|
type: boolean
|
|
description: Whether notifications are muted
|
|
method:
|
|
type: string
|
|
enum: [GET, POST, DELETE, PUT]
|
|
description: HTTP method to use
|
|
fetch_backend:
|
|
type: string
|
|
enum: [html_requests, html_webdriver]
|
|
description: Backend to use for fetching content
|
|
headers:
|
|
type: object
|
|
additionalProperties:
|
|
type: string
|
|
description: HTTP headers to include in requests
|
|
body:
|
|
type: string
|
|
description: HTTP request body
|
|
maxLength: 5000
|
|
proxy:
|
|
type: string
|
|
description: Proxy configuration
|
|
maxLength: 5000
|
|
webdriver_delay:
|
|
type: integer
|
|
description: Delay in seconds for webdriver
|
|
webdriver_js_execute_code:
|
|
type: string
|
|
description: JavaScript code to execute
|
|
maxLength: 5000
|
|
time_between_check:
|
|
type: object
|
|
properties:
|
|
weeks:
|
|
type: integer
|
|
days:
|
|
type: integer
|
|
hours:
|
|
type: integer
|
|
minutes:
|
|
type: integer
|
|
seconds:
|
|
type: integer
|
|
description: Time intervals between checks
|
|
notification_urls:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: Notification URLs for this watch
|
|
notification_title:
|
|
type: string
|
|
description: Custom notification title
|
|
maxLength: 5000
|
|
notification_body:
|
|
type: string
|
|
description: Custom notification body
|
|
maxLength: 5000
|
|
notification_format:
|
|
type: string
|
|
enum: [Text, HTML, Markdown]
|
|
description: Format for notifications
|
|
track_ldjson_price_data:
|
|
type: boolean
|
|
description: Whether to track JSON-LD price data
|
|
browser_steps:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
operation:
|
|
type: string
|
|
maxLength: 5000
|
|
selector:
|
|
type: string
|
|
maxLength: 5000
|
|
optional_value:
|
|
type: string
|
|
maxLength: 5000
|
|
required: [operation, selector, optional_value]
|
|
description: Browser automation steps
|
|
last_checked:
|
|
type: integer
|
|
description: Unix timestamp of last check
|
|
readOnly: true
|
|
last_changed:
|
|
type: integer
|
|
description: Unix timestamp of last change
|
|
readOnly: true
|
|
last_error:
|
|
type: string
|
|
description: Last error message
|
|
readOnly: true
|
|
required:
|
|
- url
|
|
|
|
CreateWatch:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Watch'
|
|
- type: object
|
|
required:
|
|
- url
|
|
|
|
Tag:
|
|
type: object
|
|
properties:
|
|
uuid:
|
|
type: string
|
|
format: uuid
|
|
description: Unique identifier for the tag
|
|
readOnly: true
|
|
title:
|
|
type: string
|
|
description: Tag title
|
|
maxLength: 5000
|
|
notification_urls:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: Default notification URLs for watches with this tag
|
|
notification_muted:
|
|
type: boolean
|
|
description: Whether notifications are muted for this tag
|
|
required:
|
|
- title
|
|
|
|
NotificationUrls:
|
|
type: object
|
|
properties:
|
|
notification_urls:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: uri
|
|
description: List of notification URLs
|
|
required:
|
|
- notification_urls
|
|
|
|
SystemInfo:
|
|
type: object
|
|
properties:
|
|
watch_count:
|
|
type: integer
|
|
description: Total number of watches
|
|
tag_count:
|
|
type: integer
|
|
description: Total number of tags
|
|
uptime:
|
|
type: string
|
|
description: System uptime
|
|
version:
|
|
type: string
|
|
description: Application version
|
|
|
|
SearchResult:
|
|
type: object
|
|
properties:
|
|
watches:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: '#/components/schemas/Watch'
|
|
description: Dictionary of matching watches keyed by UUID
|
|
|
|
WatchHistory:
|
|
type: object
|
|
additionalProperties:
|
|
type: string
|
|
description: Path to snapshot file
|
|
description: Dictionary of timestamps and snapshot paths
|
|
|
|
Error:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: Error message
|
|
|
|
paths:
|
|
/watch:
|
|
get:
|
|
tags: [Watch Management]
|
|
summary: List all watches
|
|
description: Return concise list of available watches and basic info
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/watch" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
response = requests.get('http://localhost:5000/api/v1/watch', headers=headers)
|
|
print(response.json())
|
|
parameters:
|
|
- name: recheck_all
|
|
in: query
|
|
description: Set to 1 to force recheck of all watches
|
|
schema:
|
|
type: string
|
|
enum: ["1"]
|
|
- name: tag
|
|
in: query
|
|
description: Tag name to filter results
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: List of watches
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: '#/components/schemas/Watch'
|
|
example:
|
|
"095be615-a8ad-4c33-8e9c-c7612fbf6c9f":
|
|
uuid: "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"
|
|
url: "http://example.com"
|
|
title: "Example Website Monitor"
|
|
tag: "550e8400-e29b-41d4-a716-446655440000"
|
|
tags: ["550e8400-e29b-41d4-a716-446655440000"]
|
|
paused: false
|
|
muted: false
|
|
method: "GET"
|
|
fetch_backend: "html_requests"
|
|
last_checked: 1640995200
|
|
last_changed: 1640995200
|
|
"7c9e6b8d-f2a1-4e5c-9d3b-8a7f6e4c2d1a":
|
|
uuid: "7c9e6b8d-f2a1-4e5c-9d3b-8a7f6e4c2d1a"
|
|
url: "https://news.example.org"
|
|
title: "News Site Tracker"
|
|
tag: "330e8400-e29b-41d4-a716-446655440001"
|
|
tags: ["330e8400-e29b-41d4-a716-446655440001"]
|
|
paused: false
|
|
muted: true
|
|
method: "GET"
|
|
fetch_backend: "html_webdriver"
|
|
last_checked: 1640998800
|
|
last_changed: 1640995200
|
|
post:
|
|
tags: [Watch Management]
|
|
summary: Create a new watch
|
|
description: Create a single watch. Requires at least 'url' to be set.
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X POST "http://localhost:5000/api/v1/watch" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"url": "https://example.com",
|
|
"title": "Example Site Monitor",
|
|
"time_between_check": {
|
|
"hours": 1
|
|
}
|
|
}'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
import json
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
data = {
|
|
'url': 'https://example.com',
|
|
'title': 'Example Site Monitor',
|
|
'time_between_check': {
|
|
'hours': 1
|
|
}
|
|
}
|
|
response = requests.post('http://localhost:5000/api/v1/watch',
|
|
headers=headers, json=data)
|
|
print(response.text)
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CreateWatch'
|
|
example:
|
|
url: "https://example.com"
|
|
title: "Example Site Monitor"
|
|
time_between_check:
|
|
hours: 1
|
|
responses:
|
|
'200':
|
|
description: Watch created successfully
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
example: "OK"
|
|
'500':
|
|
description: Server error
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
|
|
/watch/{uuid}:
|
|
get:
|
|
operationId: getSingleWatch
|
|
tags: [Watch Management]
|
|
summary: Get single watch
|
|
description: Retrieve watch information and set muted/paused status. Returns the FULL Watch JSON.
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
uuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'
|
|
response = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}', headers=headers)
|
|
print(response.json())
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Watch unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
- name: recheck
|
|
in: query
|
|
description: Recheck this watch
|
|
schema:
|
|
type: string
|
|
enum: ["1", "true"]
|
|
- name: paused
|
|
in: query
|
|
description: Set pause state
|
|
schema:
|
|
type: string
|
|
enum: [paused, unpaused]
|
|
- name: muted
|
|
in: query
|
|
description: Set mute state
|
|
schema:
|
|
type: string
|
|
enum: [muted, unmuted]
|
|
responses:
|
|
'200':
|
|
description: Watch information or operation result
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Watch'
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
example: "OK"
|
|
'404':
|
|
description: Watch not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
|
|
put:
|
|
operationId: updateWatch
|
|
tags: [Watch Management]
|
|
summary: Update watch
|
|
description: Update an existing watch using JSON. Accepts the same structure as returned in [get single watch information](#operation/getSingleWatch).
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X PUT "http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"url": "https://updated-example.com",
|
|
"title": "Updated Monitor",
|
|
"paused": false
|
|
}'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
uuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'
|
|
data = {
|
|
'url': 'https://updated-example.com',
|
|
'title': 'Updated Monitor',
|
|
'paused': False
|
|
}
|
|
response = requests.put(f'http://localhost:5000/api/v1/watch/{uuid}',
|
|
headers=headers, json=data)
|
|
print(response.text)
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Watch unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Watch'
|
|
responses:
|
|
'200':
|
|
description: Watch updated successfully
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
example: "OK"
|
|
'500':
|
|
description: Server error
|
|
|
|
delete:
|
|
tags: [Watch Management]
|
|
summary: Delete watch
|
|
description: Delete a watch and all related history
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X DELETE "http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
uuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'
|
|
response = requests.delete(f'http://localhost:5000/api/v1/watch/{uuid}', headers=headers)
|
|
print(response.text)
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Watch unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'200':
|
|
description: Watch deleted successfully
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
example: "OK"
|
|
|
|
/watch/{uuid}/history:
|
|
get:
|
|
tags: [Watch History]
|
|
summary: Get watch history
|
|
description: Get a list of all historical snapshots available for a watch
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/history" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
uuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'
|
|
response = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/history', headers=headers)
|
|
print(response.json())
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Watch unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'200':
|
|
description: List of available snapshots
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/WatchHistory'
|
|
example:
|
|
"1640995200": "/path/to/snapshot1.txt"
|
|
"1640998800": "/path/to/snapshot2.txt"
|
|
'404':
|
|
description: Watch not found
|
|
|
|
/watch/{uuid}/history/{timestamp}:
|
|
get:
|
|
tags: [Snapshots]
|
|
summary: Get single snapshot
|
|
description: Get single snapshot from watch. Use 'latest' for the most recent snapshot.
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/history/latest" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
uuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'
|
|
timestamp = 'latest' # or use specific timestamp like 1640995200
|
|
response = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/history/{timestamp}', headers=headers)
|
|
print(response.text)
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Watch unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
- name: timestamp
|
|
in: path
|
|
required: true
|
|
description: Snapshot timestamp or 'latest'
|
|
schema:
|
|
oneOf:
|
|
- type: integer
|
|
- type: string
|
|
enum: [latest]
|
|
- name: html
|
|
in: query
|
|
description: Set to 1 to return the last HTML
|
|
schema:
|
|
type: string
|
|
enum: ["1"]
|
|
responses:
|
|
'200':
|
|
description: Snapshot content
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
'404':
|
|
description: Snapshot not found
|
|
|
|
/watch/{uuid}/favicon:
|
|
get:
|
|
tags: [Favicon]
|
|
summary: Get watch favicon
|
|
description: Get the favicon for a watch as displayed in the watch overview list.
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/favicon" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
--output favicon.ico
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
uuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'
|
|
response = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/favicon', headers=headers)
|
|
with open('favicon.ico', 'wb') as f:
|
|
f.write(response.content)
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Watch unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'200':
|
|
description: Favicon binary data
|
|
content:
|
|
image/*:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
'404':
|
|
description: Favicon not found
|
|
|
|
/tags:
|
|
get:
|
|
tags: [Group / Tag Management]
|
|
summary: List all tags
|
|
description: Return list of available tags/groups
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/tags" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
response = requests.get('http://localhost:5000/api/v1/tags', headers=headers)
|
|
print(response.json())
|
|
responses:
|
|
'200':
|
|
description: List of tags
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: '#/components/schemas/Tag'
|
|
example:
|
|
"550e8400-e29b-41d4-a716-446655440000":
|
|
uuid: "550e8400-e29b-41d4-a716-446655440000"
|
|
title: "Production Sites"
|
|
notification_urls: ["mailto:admin@example.com"]
|
|
notification_muted: false
|
|
"330e8400-e29b-41d4-a716-446655440001":
|
|
uuid: "330e8400-e29b-41d4-a716-446655440001"
|
|
title: "News Sources"
|
|
notification_urls: ["discord://webhook_id/webhook_token"]
|
|
notification_muted: false
|
|
|
|
/tag/{uuid}:
|
|
get:
|
|
tags: [Group / Tag Management]
|
|
summary: Get single tag
|
|
description: Retrieve tag information, set notification_muted status, recheck all in tag.
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
tag_uuid = '550e8400-e29b-41d4-a716-446655440000'
|
|
response = requests.get(f'http://localhost:5000/api/v1/tag/{tag_uuid}', headers=headers)
|
|
print(response.json())
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Tag unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
- name: muted
|
|
in: query
|
|
description: Set mute state
|
|
schema:
|
|
type: string
|
|
enum: [muted, unmuted]
|
|
- name: recheck
|
|
in: query
|
|
description: Queue all watches with this tag for recheck
|
|
schema:
|
|
type: string
|
|
enum: ["true"]
|
|
responses:
|
|
'200':
|
|
description: Tag information or operation result
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Tag'
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
example: "OK"
|
|
'404':
|
|
description: Tag not found
|
|
|
|
put:
|
|
tags: [Group / Tag Management]
|
|
summary: Update tag
|
|
description: Update an existing tag using JSON
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X PUT "http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"title": "Updated Production Sites",
|
|
"notification_muted": false
|
|
}'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
tag_uuid = '550e8400-e29b-41d4-a716-446655440000'
|
|
data = {
|
|
'title': 'Updated Production Sites',
|
|
'notification_muted': False
|
|
}
|
|
response = requests.put(f'http://localhost:5000/api/v1/tag/{tag_uuid}',
|
|
headers=headers, json=data)
|
|
print(response.text)
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Tag unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Tag'
|
|
responses:
|
|
'200':
|
|
description: Tag updated successfully
|
|
'500':
|
|
description: Server error
|
|
|
|
delete:
|
|
tags: [Group / Tag Management]
|
|
summary: Delete tag
|
|
description: Delete a tag/group and remove it from all watches
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X DELETE "http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
tag_uuid = '550e8400-e29b-41d4-a716-446655440000'
|
|
response = requests.delete(f'http://localhost:5000/api/v1/tag/{tag_uuid}', headers=headers)
|
|
print(response.text)
|
|
parameters:
|
|
- name: uuid
|
|
in: path
|
|
required: true
|
|
description: Tag unique ID
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'200':
|
|
description: Tag deleted successfully
|
|
|
|
post:
|
|
tags: [Group / Tag Management]
|
|
summary: Create tag
|
|
description: Create a single tag/group
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X POST "http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"title": "Important Sites"
|
|
}'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
tag_uuid = '550e8400-e29b-41d4-a716-446655440000'
|
|
data = {'title': 'Important Sites'}
|
|
response = requests.post(f'http://localhost:5000/api/v1/tag/{tag_uuid}',
|
|
headers=headers, json=data)
|
|
print(response.text)
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Tag'
|
|
example:
|
|
title: "Important Sites"
|
|
responses:
|
|
'200':
|
|
description: Tag created successfully
|
|
'500':
|
|
description: Server error
|
|
|
|
/notifications:
|
|
get:
|
|
tags: [Notifications]
|
|
summary: Get notification URLs
|
|
description: Return the notification URL list from the configuration
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/notifications" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
response = requests.get('http://localhost:5000/api/v1/notifications', headers=headers)
|
|
print(response.json())
|
|
responses:
|
|
'200':
|
|
description: List of notification URLs
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NotificationUrls'
|
|
|
|
post:
|
|
tags: [Notifications]
|
|
summary: Add notification URLs
|
|
description: Add one or more notification URLs to the configuration
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X POST "http://localhost:5000/api/v1/notifications" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"notification_urls": [
|
|
"mailto:admin@example.com",
|
|
"discord://webhook_id/webhook_token"
|
|
]
|
|
}'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
data = {
|
|
'notification_urls': [
|
|
'mailto:admin@example.com',
|
|
'discord://webhook_id/webhook_token'
|
|
]
|
|
}
|
|
response = requests.post('http://localhost:5000/api/v1/notifications',
|
|
headers=headers, json=data)
|
|
print(response.json())
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NotificationUrls'
|
|
example:
|
|
notification_urls:
|
|
- "mailto:admin@example.com"
|
|
- "discord://webhook_id/webhook_token"
|
|
responses:
|
|
'201':
|
|
description: Notification URLs added successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NotificationUrls'
|
|
'400':
|
|
description: Invalid input
|
|
|
|
put:
|
|
tags: [Notifications]
|
|
summary: Replace notification URLs
|
|
description: Replace all notification URLs with the provided list (can be empty)
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X PUT "http://localhost:5000/api/v1/notifications" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"notification_urls": [
|
|
"mailto:newadmin@example.com"
|
|
]
|
|
}'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
data = {
|
|
'notification_urls': [
|
|
'mailto:newadmin@example.com'
|
|
]
|
|
}
|
|
response = requests.put('http://localhost:5000/api/v1/notifications',
|
|
headers=headers, json=data)
|
|
print(response.json())
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NotificationUrls'
|
|
responses:
|
|
'200':
|
|
description: Notification URLs replaced successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NotificationUrls'
|
|
'400':
|
|
description: Invalid input
|
|
|
|
delete:
|
|
tags: [Notifications]
|
|
summary: Delete notification URLs
|
|
description: Delete one or more notification URLs from the configuration
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X DELETE "http://localhost:5000/api/v1/notifications" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"notification_urls": [
|
|
"mailto:admin@example.com"
|
|
]
|
|
}'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
data = {
|
|
'notification_urls': [
|
|
'mailto:admin@example.com'
|
|
]
|
|
}
|
|
response = requests.delete('http://localhost:5000/api/v1/notifications',
|
|
headers=headers, json=data)
|
|
print(response.status_code)
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NotificationUrls'
|
|
responses:
|
|
'204':
|
|
description: Notification URLs deleted successfully
|
|
'400':
|
|
description: No matching notification URLs found
|
|
|
|
/search:
|
|
get:
|
|
tags: [Search]
|
|
summary: Search watches
|
|
description: Search watches by URL or title text
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/search?q=example.com" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
params = {'q': 'example.com'}
|
|
response = requests.get('http://localhost:5000/api/v1/search',
|
|
headers=headers, params=params)
|
|
print(response.json())
|
|
parameters:
|
|
- name: q
|
|
in: query
|
|
required: true
|
|
description: Search query to match against watch URLs and titles
|
|
schema:
|
|
type: string
|
|
- name: tag
|
|
in: query
|
|
description: Tag name to limit results (name not UUID)
|
|
schema:
|
|
type: string
|
|
- name: partial
|
|
in: query
|
|
description: Allow partial matching of URL query
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Search results
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SearchResult'
|
|
example:
|
|
watches:
|
|
"095be615-a8ad-4c33-8e9c-c7612fbf6c9f":
|
|
uuid: "095be615-a8ad-4c33-8e9c-c7612fbf6c9f"
|
|
url: "http://example.com"
|
|
title: "Example Website Monitor"
|
|
tag: "550e8400-e29b-41d4-a716-446655440000"
|
|
tags: ["550e8400-e29b-41d4-a716-446655440000"]
|
|
paused: false
|
|
muted: false
|
|
|
|
/import:
|
|
post:
|
|
tags: [Import]
|
|
summary: Import watch URLs
|
|
description: Import a list of URLs to monitor. Accepts line-separated URLs in request body.
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X POST "http://localhost:5000/api/v1/import" \
|
|
-H "x-api-key: YOUR_API_KEY" \
|
|
-H "Content-Type: text/plain" \
|
|
-d $'https://example.com\nhttps://example.org\nhttps://example.net'
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {
|
|
'x-api-key': 'YOUR_API_KEY',
|
|
'Content-Type': 'text/plain'
|
|
}
|
|
urls = 'https://example.com\nhttps://example.org\nhttps://example.net'
|
|
response = requests.post('http://localhost:5000/api/v1/import',
|
|
headers=headers, data=urls)
|
|
print(response.json())
|
|
parameters:
|
|
- name: tag_uuids
|
|
in: query
|
|
description: Tag UUID to apply to imported watches
|
|
schema:
|
|
type: string
|
|
- name: tag
|
|
in: query
|
|
description: Tag name to apply to imported watches
|
|
schema:
|
|
type: string
|
|
- name: proxy
|
|
in: query
|
|
description: Proxy key to use for imported watches
|
|
schema:
|
|
type: string
|
|
- name: dedupe
|
|
in: query
|
|
description: Remove duplicate URLs (default true)
|
|
schema:
|
|
type: boolean
|
|
default: true
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
example: |
|
|
https://example.com
|
|
https://example.org
|
|
https://example.net
|
|
responses:
|
|
'200':
|
|
description: URLs imported successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: uuid
|
|
description: List of created watch UUIDs
|
|
'500':
|
|
description: Server error
|
|
|
|
/systeminfo:
|
|
get:
|
|
tags: [System Information]
|
|
summary: Get system information
|
|
description: Return information about the current system state
|
|
x-code-samples:
|
|
- lang: 'curl'
|
|
source: |
|
|
curl -X GET "http://localhost:5000/api/v1/systeminfo" \
|
|
-H "x-api-key: YOUR_API_KEY"
|
|
- lang: 'Python'
|
|
source: |
|
|
import requests
|
|
|
|
headers = {'x-api-key': 'YOUR_API_KEY'}
|
|
response = requests.get('http://localhost:5000/api/v1/systeminfo', headers=headers)
|
|
print(response.json())
|
|
responses:
|
|
'200':
|
|
description: System information
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SystemInfo'
|
|
example:
|
|
watch_count: 42
|
|
tag_count: 5
|
|
uptime: "2 days, 3:45:12"
|
|
version: "0.50.10" |