More openAPI fixes

API-OpenAPI
dgtlmoon 2025-08-23 23:53:06 +02:00
rodzic 6e6136aaa7
commit f4f716fffa
2 zmienionych plików z 565 dodań i 27 usunięć

Wyświetl plik

@ -41,17 +41,80 @@ servers:
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
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:
@ -266,6 +329,18 @@ paths:
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
@ -316,6 +391,38 @@ paths:
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:
@ -344,9 +451,23 @@ paths:
/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
@ -392,9 +513,38 @@ paths:
$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.
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
@ -424,6 +574,19 @@ paths:
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
@ -446,6 +609,19 @@ paths:
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
@ -472,6 +648,20 @@ paths:
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
@ -510,6 +700,21 @@ paths:
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
@ -534,6 +739,18 @@ paths:
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
@ -560,6 +777,19 @@ paths:
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
@ -598,6 +828,32 @@ paths:
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
@ -622,6 +878,19 @@ paths:
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
@ -638,6 +907,28 @@ paths:
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:
@ -657,6 +948,18 @@ paths:
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
@ -669,6 +972,35 @@ paths:
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:
@ -693,6 +1025,33 @@ paths:
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:
@ -713,6 +1072,33 @@ paths:
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:
@ -730,6 +1116,20 @@ paths:
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
@ -770,6 +1170,25 @@ paths:
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
@ -821,6 +1240,18 @@ paths:
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

File diff suppressed because one or more lines are too long