From bcd32852ca190a8aec57bcee71bec89c2471e587 Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Fri, 13 Feb 2026 16:30:59 +0100 Subject: [PATCH] API - Remove `flask_expects_json` validation, this is covered entirely by OpenAPI, update OpenAPI spec. (#3871) --- changedetectionio/api/Import.py | 29 +- changedetectionio/api/Notifications.py | 5 - changedetectionio/api/Tags.py | 64 ++- changedetectionio/api/Watch.py | 35 +- changedetectionio/api/__init__.py | 175 ++++++-- changedetectionio/api/api_schema.py | 162 ------- changedetectionio/model/__init__.py | 39 +- changedetectionio/tests/test_api.py | 245 +++++++++- .../test_api_notification_urls_validation.py | 4 +- changedetectionio/tests/test_api_openapi.py | 15 +- changedetectionio/tests/test_api_tags.py | 53 +++ docs/api-spec.yaml | 367 ++++++++++++--- docs/api_v1/index.html | 419 ++++++++++++++++-- requirements.txt | 5 +- 14 files changed, 1280 insertions(+), 337 deletions(-) delete mode 100644 changedetectionio/api/api_schema.py diff --git a/changedetectionio/api/Import.py b/changedetectionio/api/Import.py index 1c1fddb65..9b0cec4e4 100644 --- a/changedetectionio/api/Import.py +++ b/changedetectionio/api/Import.py @@ -2,7 +2,7 @@ from changedetectionio.strtobool import strtobool from flask_restful import abort, Resource from flask import request from functools import wraps -from . import auth, validate_openapi_request, schema_create_watch +from . import auth, validate_openapi_request from ..validate_url import is_safe_valid_url import json @@ -33,9 +33,25 @@ def convert_query_param_to_type(value, schema_property): Returns: Converted value in the appropriate type + + Supports both OpenAPI 3.1 formats: + - type: [string, 'null'] (array format) + - anyOf: [{type: string}, {type: null}] (anyOf format) """ - # Handle anyOf schemas (extract the first type) - if 'anyOf' in schema_property: + prop_type = schema_property.get('type') + + # Handle OpenAPI 3.1 type arrays: type: [string, 'null'] + if isinstance(prop_type, list): + # Use the first non-null type from the array + for t in prop_type: + if t != 'null': + prop_type = t + break + else: + prop_type = None + + # Handle anyOf schemas (older format) + elif 'anyOf' in schema_property: # Use the first non-null type from anyOf for option in schema_property['anyOf']: if option.get('type') and option.get('type') != 'null': @@ -43,8 +59,6 @@ def convert_query_param_to_type(value, schema_property): break else: prop_type = None - else: - prop_type = schema_property.get('type') # Handle array type (e.g., notification_urls) if prop_type == 'array': @@ -89,7 +103,7 @@ class Import(Resource): @validate_openapi_request('importWatches') def post(self): """Import a list of watched URLs with optional watch configuration.""" - + from . import get_watch_schema_properties # Special parameters that are NOT watch configuration special_params = {'tag', 'tag_uuids', 'dedupe', 'proxy'} @@ -115,7 +129,8 @@ class Import(Resource): tag_uuids = tag_uuids.split(',') # Extract ALL other query parameters as watch configuration - schema_properties = schema_create_watch.get('properties', {}) + # Get schema from OpenAPI spec (replaces old schema_create_watch) + schema_properties = get_watch_schema_properties() for param_name, param_value in request.args.items(): # Skip special parameters if param_name in special_params: diff --git a/changedetectionio/api/Notifications.py b/changedetectionio/api/Notifications.py index 7d2f8db98..8ce4e9774 100644 --- a/changedetectionio/api/Notifications.py +++ b/changedetectionio/api/Notifications.py @@ -1,8 +1,6 @@ -from flask_expects_json import expects_json from flask_restful import Resource, abort from flask import request from . import auth, validate_openapi_request -from . import schema_create_notification_urls, schema_delete_notification_urls class Notifications(Resource): def __init__(self, **kwargs): @@ -22,7 +20,6 @@ class Notifications(Resource): @auth.check_token @validate_openapi_request('addNotifications') - @expects_json(schema_create_notification_urls) def post(self): """Create Notification URLs.""" @@ -50,7 +47,6 @@ class Notifications(Resource): @auth.check_token @validate_openapi_request('replaceNotifications') - @expects_json(schema_create_notification_urls) def put(self): """Replace Notification URLs.""" json_data = request.get_json() @@ -73,7 +69,6 @@ class Notifications(Resource): @auth.check_token @validate_openapi_request('deleteNotifications') - @expects_json(schema_delete_notification_urls) def delete(self): """Delete Notification URLs.""" diff --git a/changedetectionio/api/Tags.py b/changedetectionio/api/Tags.py index 726b185ad..33791e346 100644 --- a/changedetectionio/api/Tags.py +++ b/changedetectionio/api/Tags.py @@ -1,6 +1,5 @@ from changedetectionio import queuedWatchMetaData from changedetectionio import worker_pool -from flask_expects_json import expects_json from flask_restful import abort, Resource from loguru import logger @@ -8,8 +7,7 @@ import threading from flask import request from . import auth -# Import schemas from __init__.py -from . import schema_tag, schema_create_tag, schema_update_tag, validate_openapi_request +from . import validate_openapi_request class Tag(Resource): @@ -69,7 +67,25 @@ class Tag(Resource): tag.commit() return "OK", 200 - return tag + # Filter out Watch-specific runtime fields that don't apply to Tags (yet) + # TODO: Future enhancement - aggregate these values from all Watches that have this tag: + # - check_count: sum of all watches' check_count + # - last_checked: most recent last_checked from all watches + # - last_changed: most recent last_changed from all watches + # - consecutive_filter_failures: count of watches with failures + # - etc. + # These come from watch_base inheritance but currently have no meaningful value for Tags + watch_only_fields = { + 'browser_steps_last_error_step', 'check_count', 'consecutive_filter_failures', + 'content-type', 'fetch_time', 'last_changed', 'last_checked', 'last_error', + 'last_notification_error', 'last_viewed', 'notification_alert_count', + 'page_title', 'previous_md5', 'previous_md5_before_filters', 'remote_server_reply' + } + + # Create clean tag dict without Watch-specific fields + clean_tag = {k: v for k, v in tag.items() if k not in watch_only_fields} + + return clean_tag @auth.check_token @validate_openapi_request('deleteTag') @@ -102,24 +118,46 @@ class Tag(Resource): @auth.check_token @validate_openapi_request('updateTag') - @expects_json(schema_update_tag) def put(self, uuid): """Update tag information.""" tag = self.datastore.data['settings']['application']['tags'].get(uuid) if not tag: abort(404, message='No tag exists with the UUID of {}'.format(uuid)) + # Make a mutable copy of request.json for modification + json_data = dict(request.json) + # Validate notification_urls if provided - if 'notification_urls' in request.json: + if 'notification_urls' in json_data: from wtforms import ValidationError from changedetectionio.api.Notifications import validate_notification_urls try: - notification_urls = request.json.get('notification_urls', []) + notification_urls = json_data.get('notification_urls', []) validate_notification_urls(notification_urls) except ValidationError as e: return str(e), 400 - tag.update(request.json) + # Filter out readOnly fields (extracted from OpenAPI spec Tag schema) + # These are system-managed fields that should never be user-settable + from . import get_readonly_tag_fields + readonly_fields = get_readonly_tag_fields() + + # Tag model inherits from watch_base but has no @property attributes of its own + # So we only need to filter readOnly fields + for field in readonly_fields: + json_data.pop(field, None) + + # Validate remaining fields - reject truly unknown fields + # Get valid fields from Tag schema + from . import get_tag_schema_properties + valid_fields = set(get_tag_schema_properties().keys()) + + # Check for unknown fields + unknown_fields = set(json_data.keys()) - valid_fields + if unknown_fields: + return f"Unknown field(s): {', '.join(sorted(unknown_fields))}", 400 + + tag.update(json_data) tag.commit() return "OK", 200 @@ -127,13 +165,21 @@ class Tag(Resource): @auth.check_token @validate_openapi_request('createTag') - # Only cares for {'title': 'xxxx'} def post(self): """Create a single tag/group.""" json_data = request.get_json() title = json_data.get("title",'').strip() + # Validate that only valid fields are provided + # Get valid fields from Tag schema + from . import get_tag_schema_properties + valid_fields = set(get_tag_schema_properties().keys()) + + # Check for unknown fields + unknown_fields = set(json_data.keys()) - valid_fields + if unknown_fields: + return f"Unknown field(s): {', '.join(sorted(unknown_fields))}", 400 new_uuid = self.datastore.add_tag(title=title) if new_uuid: diff --git a/changedetectionio/api/Watch.py b/changedetectionio/api/Watch.py index b13ffb174..b0e56f140 100644 --- a/changedetectionio/api/Watch.py +++ b/changedetectionio/api/Watch.py @@ -8,13 +8,11 @@ from . import auth from changedetectionio import queuedWatchMetaData, strtobool from changedetectionio import worker_pool from flask import request, make_response, send_from_directory -from flask_expects_json import expects_json from flask_restful import abort, Resource from loguru import logger import copy -# Import schemas from __init__.py -from . import schema, schema_create_watch, schema_update_watch, validate_openapi_request +from . import validate_openapi_request, get_readonly_watch_fields from ..notification import valid_notification_formats from ..notification.handler import newline_re @@ -121,7 +119,6 @@ class Watch(Resource): @auth.check_token @validate_openapi_request('updateWatch') - @expects_json(schema_update_watch) def put(self, uuid): """Update watch information.""" watch = self.datastore.data['watching'].get(uuid) @@ -175,6 +172,35 @@ class Watch(Resource): # Extract and remove processor config fields from json_data processor_config_data = processors.extract_processor_config_from_form_data(json_data) + # Filter out readOnly fields (extracted from OpenAPI spec Watch schema) + # These are system-managed fields that should never be user-settable + readonly_fields = get_readonly_watch_fields() + + # Also filter out @property attributes (computed/derived values from the model) + # These are not stored and should be ignored in PUT requests + from changedetectionio.model.Watch import model as WatchModel + property_fields = WatchModel.get_property_names() + + # Combine both sets of fields to ignore + fields_to_ignore = readonly_fields | property_fields + + # Remove all ignored fields from update data + for field in fields_to_ignore: + json_data.pop(field, None) + + # Validate remaining fields - reject truly unknown fields + # Get valid fields from WatchBase schema + from . import get_watch_schema_properties + valid_fields = set(get_watch_schema_properties().keys()) + + # Also allow last_viewed (explicitly defined in UpdateWatch schema) + valid_fields.add('last_viewed') + + # Check for unknown fields + unknown_fields = set(json_data.keys()) - valid_fields + if unknown_fields: + return f"Unknown field(s): {', '.join(sorted(unknown_fields))}", 400 + # Update watch with regular (non-processor-config) fields watch.update(json_data) watch.commit() @@ -393,7 +419,6 @@ class CreateWatch(Resource): @auth.check_token @validate_openapi_request('createWatch') - @expects_json(schema_create_watch) def post(self): """Create a single watch.""" diff --git a/changedetectionio/api/__init__.py b/changedetectionio/api/__init__.py index c95a37005..e0d9cc95a 100644 --- a/changedetectionio/api/__init__.py +++ b/changedetectionio/api/__init__.py @@ -1,41 +1,6 @@ -import copy import functools from flask import request, abort from loguru import logger -from . import api_schema -from ..model import watch_base - -# Build a JSON Schema atleast partially based on our Watch model -watch_base_config = watch_base() -schema = api_schema.build_watch_json_schema(watch_base_config) - -schema_create_watch = copy.deepcopy(schema) -schema_create_watch['required'] = ['url'] -del schema_create_watch['properties']['last_viewed'] -# Allow processor_config_* fields (handled separately in endpoint) -schema_create_watch['patternProperties'] = { - '^processor_config_': {'type': ['string', 'number', 'boolean', 'object', 'array', 'null']} -} - -schema_update_watch = copy.deepcopy(schema) -schema_update_watch['additionalProperties'] = False -# Allow processor_config_* fields (handled separately in endpoint) -schema_update_watch['patternProperties'] = { - '^processor_config_': {'type': ['string', 'number', 'boolean', 'object', 'array', 'null']} -} - -# Tag schema is also based on watch_base since Tag inherits from it -schema_tag = copy.deepcopy(schema) -schema_create_tag = copy.deepcopy(schema_tag) -schema_create_tag['required'] = ['title'] -schema_update_tag = copy.deepcopy(schema_tag) -schema_update_tag['additionalProperties'] = False - -schema_notification_urls = copy.deepcopy(schema) -schema_create_notification_urls = copy.deepcopy(schema_notification_urls) -schema_create_notification_urls['required'] = ['notification_urls'] -schema_delete_notification_urls = copy.deepcopy(schema_notification_urls) -schema_delete_notification_urls['required'] = ['notification_urls'] @functools.cache def get_openapi_spec(): @@ -54,6 +19,134 @@ def get_openapi_spec(): _openapi_spec = OpenAPI.from_dict(spec_dict) return _openapi_spec +@functools.cache +def get_openapi_schema_dict(): + """ + Get the raw OpenAPI spec dictionary for schema access. + + Used by Import endpoint to validate and convert query parameters. + Returns the YAML dict directly (not the OpenAPI object). + """ + import os + import yaml + + spec_path = os.path.join(os.path.dirname(__file__), '../../docs/api-spec.yaml') + if not os.path.exists(spec_path): + spec_path = os.path.join(os.path.dirname(__file__), '../docs/api-spec.yaml') + + with open(spec_path, 'r', encoding='utf-8') as f: + return yaml.safe_load(f) + +@functools.cache +def _resolve_schema_properties(schema_name): + """ + Generic helper to resolve schema properties, including allOf inheritance. + + Args: + schema_name: Name of the schema (e.g., 'WatchBase', 'Watch', 'Tag') + + Returns: + dict: All properties including inherited ones from $ref schemas + """ + spec_dict = get_openapi_schema_dict() + schema = spec_dict['components']['schemas'].get(schema_name, {}) + + properties = {} + + # Handle allOf (schema inheritance) + if 'allOf' in schema: + for item in schema['allOf']: + # Resolve $ref to parent schema + if '$ref' in item: + ref_path = item['$ref'].split('/')[-1] + ref_schema = spec_dict['components']['schemas'].get(ref_path, {}) + properties.update(ref_schema.get('properties', {})) + # Add schema-specific properties + if 'properties' in item: + properties.update(item['properties']) + else: + # Direct properties (no inheritance) + properties = schema.get('properties', {}) + + return properties + +@functools.cache +def _resolve_readonly_fields(schema_name): + """ + Generic helper to resolve readOnly fields, including allOf inheritance. + + Args: + schema_name: Name of the schema (e.g., 'Watch', 'Tag') + + Returns: + frozenset: All readOnly field names including inherited ones + """ + spec_dict = get_openapi_schema_dict() + schema = spec_dict['components']['schemas'].get(schema_name, {}) + + readonly_fields = set() + + # Handle allOf (schema inheritance) + if 'allOf' in schema: + for item in schema['allOf']: + # Resolve $ref to parent schema + if '$ref' in item: + ref_path = item['$ref'].split('/')[-1] + ref_schema = spec_dict['components']['schemas'].get(ref_path, {}) + if 'properties' in ref_schema: + for field_name, field_def in ref_schema['properties'].items(): + if field_def.get('readOnly') is True: + readonly_fields.add(field_name) + # Check schema-specific properties + if 'properties' in item: + for field_name, field_def in item['properties'].items(): + if field_def.get('readOnly') is True: + readonly_fields.add(field_name) + else: + # Direct properties (no inheritance) + if 'properties' in schema: + for field_name, field_def in schema['properties'].items(): + if field_def.get('readOnly') is True: + readonly_fields.add(field_name) + + return frozenset(readonly_fields) + +@functools.cache +def get_watch_schema_properties(): + """ + Extract watch schema properties from OpenAPI spec for Import endpoint. + + Returns WatchBase properties (all writable Watch fields). + """ + return _resolve_schema_properties('WatchBase') + +@functools.cache +def get_readonly_watch_fields(): + """ + Extract readOnly field names from Watch schema in OpenAPI spec. + + Returns readOnly fields from WatchBase (uuid, date_created) + Watch-specific readOnly fields. + """ + return _resolve_readonly_fields('Watch') + +@functools.cache +def get_tag_schema_properties(): + """ + Extract Tag schema properties from OpenAPI spec. + + Returns WatchBase properties + Tag-specific properties (overrides_watch). + """ + return _resolve_schema_properties('Tag') + +@functools.cache +def get_readonly_tag_fields(): + """ + Extract readOnly field names from Tag schema in OpenAPI spec. + + Returns readOnly fields from WatchBase (uuid, date_created) + Tag-specific readOnly fields. + """ + return _resolve_readonly_fields('Tag') + def validate_openapi_request(operation_id): """Decorator to validate incoming requests against OpenAPI spec.""" def decorator(f): @@ -72,8 +165,16 @@ def validate_openapi_request(operation_id): if result.errors: error_details = [] for error in result.errors: - error_details.append(str(error)) - raise BadRequest(f"OpenAPI validation failed: {error_details}") + # Extract detailed schema errors from __cause__ + if hasattr(error, '__cause__') and hasattr(error.__cause__, 'schema_errors'): + for schema_error in error.__cause__.schema_errors: + field = '.'.join(str(p) for p in schema_error.path) if schema_error.path else 'body' + msg = schema_error.message if hasattr(schema_error, 'message') else str(schema_error) + error_details.append(f"{field}: {msg}") + else: + error_details.append(str(error)) + logger.error(f"API Call - Validation failed: {'; '.join(error_details)}") + raise BadRequest(f"Validation failed: {'; '.join(error_details)}") except BadRequest: # Re-raise BadRequest exceptions (validation failures) raise diff --git a/changedetectionio/api/api_schema.py b/changedetectionio/api/api_schema.py deleted file mode 100644 index cf6bc9445..000000000 --- a/changedetectionio/api/api_schema.py +++ /dev/null @@ -1,162 +0,0 @@ -# Responsible for building the storage dict into a set of rules ("JSON Schema") acceptable via the API -# Probably other ways to solve this when the backend switches to some ORM -from changedetectionio.notification import valid_notification_formats - - -def build_time_between_check_json_schema(): - # Setup time between check schema - schema_properties_time_between_check = { - "type": "object", - "additionalProperties": False, - "properties": {} - } - for p in ['weeks', 'days', 'hours', 'minutes', 'seconds']: - schema_properties_time_between_check['properties'][p] = { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - - return schema_properties_time_between_check - -def build_watch_json_schema(d): - # Base JSON schema - schema = { - 'type': 'object', - 'properties': {}, - } - - for k, v in d.items(): - # @todo 'integer' is not covered here because its almost always for internal usage - - if isinstance(v, type(None)): - schema['properties'][k] = { - "anyOf": [ - {"type": "null"}, - ] - } - elif isinstance(v, list): - schema['properties'][k] = { - "anyOf": [ - {"type": "array", - # Always is an array of strings, like text or regex or something - "items": { - "type": "string", - "maxLength": 5000 - } - }, - ] - } - elif isinstance(v, bool): - schema['properties'][k] = { - "anyOf": [ - {"type": "boolean"}, - ] - } - elif isinstance(v, str): - schema['properties'][k] = { - "anyOf": [ - {"type": "string", - "maxLength": 5000}, - ] - } - - # Can also be a string (or None by default above) - for v in ['body', - 'notification_body', - 'notification_format', - 'notification_title', - 'proxy', - 'tag', - 'title', - 'webdriver_js_execute_code' - ]: - schema['properties'][v]['anyOf'].append({'type': 'string', "maxLength": 5000}) - - for v in ['last_viewed']: - schema['properties'][v] = { - "type": "integer", - "description": "Unix timestamp in seconds of the last time the watch was viewed.", - "minimum": 0 - } - - # None or Boolean - schema['properties']['track_ldjson_price_data']['anyOf'].append({'type': 'boolean'}) - - schema['properties']['method'] = {"type": "string", - "enum": ["GET", "POST", "DELETE", "PUT"] - } - - schema['properties']['fetch_backend']['anyOf'].append({"type": "string", - "enum": ["html_requests", "html_webdriver"] - }) - - schema['properties']['processor'] = {"anyOf": [ - {"type": "string", "enum": ["restock_diff", "text_json_diff"]}, - {"type": "null"} - ]} - - # All headers must be key/value type dict - schema['properties']['headers'] = { - "type": "object", - "patternProperties": { - # Should always be a string:string type value - ".*": {"type": "string"}, - } - } - - schema['properties']['notification_format'] = {'type': 'string', - 'enum': list(valid_notification_formats.keys()) - } - - # Stuff that shouldn't be available but is just state-storage - for v in ['previous_md5', 'last_error', 'has_ldjson_price_data', 'previous_md5_before_filters', 'uuid']: - del schema['properties'][v] - - schema['properties']['webdriver_delay']['anyOf'].append({'type': 'integer'}) - - schema['properties']['time_between_check'] = build_time_between_check_json_schema() - - schema['properties']['time_between_check_use_default'] = { - "type": "boolean", - "default": True, - "description": "Whether to use global settings for time between checks - defaults to true if not set" - } - - schema['properties']['browser_steps'] = { - "anyOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "operation": { - "type": ["string", "null"], - "maxLength": 5000 # Allows null and any string up to 5000 chars (including "") - }, - "selector": { - "type": ["string", "null"], - "maxLength": 5000 - }, - "optional_value": { - "type": ["string", "null"], - "maxLength": 5000 - } - }, - "required": ["operation", "selector", "optional_value"], - "additionalProperties": False # No extra keys allowed - } - }, - {"type": "null"}, # Allows null for `browser_steps` - {"type": "array", "maxItems": 0} # Allows empty array [] - ] - } - - # headers ? - return schema - diff --git a/changedetectionio/model/__init__.py b/changedetectionio/model/__init__.py index b010c1b57..c3192bf60 100644 --- a/changedetectionio/model/__init__.py +++ b/changedetectionio/model/__init__.py @@ -26,6 +26,7 @@ class watch_base(dict): - Configuration override chain resolution (Watch → Tag → Global) - Immutability options - Better testing + - USE https://docs.pydantic.dev/latest/integrations/datamodel_code_generator TO BUILD THE MODEL FROM THE API-SPEC!!! CHAIN RESOLUTION ARCHITECTURE: The dream is a 3-level override hierarchy: @@ -173,7 +174,7 @@ class watch_base(dict): 'body': None, 'browser_steps': [], 'browser_steps_last_error_step': None, - 'conditions' : {}, + 'conditions' : [], 'conditions_match_logic': CONDITIONS_MATCH_LOGIC_DEFAULT, 'check_count': 0, 'check_unique_lines': False, # On change-detected, compare against all history if its something new @@ -299,6 +300,42 @@ class watch_base(dict): if self.get('default'): del self['default'] + @classmethod + def get_property_names(cls): + """ + Get all @property attribute names from this model class using introspection. + + This discovers computed/derived properties that are not stored in the datastore. + These properties should be filtered out during PUT/POST requests. + + Returns: + frozenset: Immutable set of @property attribute names from the model class + """ + import functools + + # Create a cached version if it doesn't exist + if not hasattr(cls, '_cached_get_property_names'): + @functools.cache + def _get_props(): + properties = set() + # Use introspection to find all @property attributes + for name in dir(cls): + # Skip private/magic attributes + if name.startswith('_'): + continue + try: + attr = getattr(cls, name) + # Check if it's a property descriptor + if isinstance(attr, property): + properties.add(name) + except (AttributeError, TypeError): + continue + return frozenset(properties) + + cls._cached_get_property_names = _get_props + + return cls._cached_get_property_names() + def __deepcopy__(self, memo): """ Custom deepcopy for all watch_base subclasses (Watch, Tag, etc.). diff --git a/changedetectionio/tests/test_api.py b/changedetectionio/tests/test_api.py index a7277eeb4..8a2e1b776 100644 --- a/changedetectionio/tests/test_api.py +++ b/changedetectionio/tests/test_api.py @@ -328,6 +328,68 @@ def test_api_simple(client, live_server, measure_memory_usage, datastore_path): ) assert len(res.json) == 0, "Watch list should be empty" +def test_roundtrip_API(client, live_server, measure_memory_usage, datastore_path): + """ + Test the full round trip, this way we test the default Model fits back into OpenAPI spec + :param client: + :param live_server: + :param measure_memory_usage: + :param datastore_path: + :return: + """ + api_key = live_server.app.config['DATASTORE'].data['settings']['application'].get('api_access_token') + + set_original_response(datastore_path=datastore_path) + test_url = url_for('test_endpoint', _external=True) + + # Create new + res = client.post( + url_for("createwatch"), + data=json.dumps({"url": test_url}), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + follow_redirects=True + ) + + assert res.status_code == 201 + uuid = res.json.get('uuid') + + # Now fetch it and send it back + + res = client.get( + url_for("watch", uuid=uuid), + headers={'x-api-key': api_key} + ) + + watch=res.json + + # Be sure that 'readOnly' values are never updated in the real watch + watch['last_changed'] = 454444444444 + watch['date_created'] = 454444444444 + + # HTTP PUT ( UPDATE an existing watch ) + res = client.put( + url_for("watch", uuid=uuid), + headers={'x-api-key': api_key, 'content-type': 'application/json'}, + data=json.dumps(watch), + ) + if res.status_code != 200: + print(f"\n=== PUT failed with {res.status_code} ===") + print(f"Error: {res.data}") + assert res.status_code == 200, "HTTP PUT update was sent OK" + + res = client.get( + url_for("watch", uuid=uuid), + headers={'x-api-key': api_key} + ) + last_changed = res.json.get('last_changed') + assert last_changed != 454444444444 + assert last_changed != "454444444444" + + date_created = res.json.get('date_created') + assert date_created != 454444444444 + assert date_created != "454444444444" + + def test_access_denied(client, live_server, measure_memory_usage, datastore_path): # `config_api_token_enabled` Should be On by default res = client.get( @@ -401,6 +463,9 @@ def test_api_watch_PUT_update(client, live_server, measure_memory_usage, datasto follow_redirects=True ) + if res.status_code != 201: + print(f"\n=== POST createwatch failed with {res.status_code} ===") + print(f"Response: {res.data}") assert res.status_code == 201 wait_for_all_checks(client) @@ -464,11 +529,12 @@ def test_api_watch_PUT_update(client, live_server, measure_memory_usage, datasto ) assert res.status_code == 400, "Should get error 400 when we give a field that doesnt exist" - # Message will come from `flask_expects_json` - # With patternProperties for processor_config_*, the error message format changed slightly - assert (b'Additional properties are not allowed' in res.data or + # Backend validation now rejects unknown fields with a clear error message + assert (b'Unknown field' in res.data or + b'Additional properties are not allowed' in res.data or + b'Unevaluated properties are not allowed' in res.data or b'does not match any of the regexes' in res.data), \ - "Should reject unknown fields with schema validation error" + "Should reject unknown fields with validation error" # Try a XSS URL @@ -553,6 +619,8 @@ def test_api_import(client, live_server, measure_memory_usage, datastore_path): assert res.status_code == 200 uuid = res.json[0] watch = live_server.app.config['DATASTORE'].data['watching'][uuid] + assert isinstance(watch['notification_urls'], list), "notification_urls must be stored as a list" + assert len(watch['notification_urls']) == 2, "notification_urls should have 2 entries" assert 'mailto://test@example.com' in watch['notification_urls'], "notification_urls should contain first email" assert 'mailto://admin@example.com' in watch['notification_urls'], "notification_urls should contain second email" @@ -599,6 +667,34 @@ def test_api_import(client, live_server, measure_memory_usage, datastore_path): assert res.status_code == 400, "Should reject unknown field" assert b"Unknown watch configuration parameter" in res.data, "Error message should mention unknown parameter" + # Test 7: Import with complex nested array (browser_steps) - array of objects + browser_steps = json.dumps([ + {"operation": "wait", "selector": "5", "optional_value": ""}, + {"operation": "click", "selector": "button.submit", "optional_value": ""} + ]) + params = urllib.parse.urlencode({ + 'tag': 'browser-test', + 'browser_steps': browser_steps + }) + + res = client.post( + url_for("import") + "?" + params, + data='https://website8.com', + headers={'x-api-key': api_key}, + follow_redirects=True + ) + + assert res.status_code == 200, "Should accept browser_steps array" + uuid = res.json[0] + watch = live_server.app.config['DATASTORE'].data['watching'][uuid] + assert len(watch['browser_steps']) == 2, "Should have 2 browser steps" + assert watch['browser_steps'][0]['operation'] == 'wait', "First step should be wait" + assert watch['browser_steps'][1]['operation'] == 'click', "Second step should be click" + assert watch['browser_steps'][1]['selector'] == 'button.submit', "Second step selector should be button.submit" + + # Cleanup + delete_all_watches(client) + def test_api_import_small_synchronous(client, live_server, measure_memory_usage, datastore_path): """Test that small imports (< threshold) are processed synchronously""" @@ -837,7 +933,9 @@ def test_api_url_validation(client, live_server, measure_memory_usage, datastore ) assert res.status_code == 400, "Updating watch URL to null should fail" # Accept either OpenAPI validation error or our custom validation error - assert b'URL cannot be null' in res.data or b'OpenAPI validation failed' in res.data or b'validation error' in res.data.lower() + assert (b'URL cannot be null' in res.data or + b'Validation failed' in res.data or + b'validation error' in res.data.lower()) # Test 8: UPDATE to empty string URL should fail res = client.put( @@ -924,3 +1022,140 @@ def test_api_url_validation(client, live_server, measure_memory_usage, datastore headers={'x-api-key': api_key}, ) delete_all_watches(client) + + +def test_api_time_between_check_validation(client, live_server, measure_memory_usage, datastore_path): + """ + Test that time_between_check validation works correctly: + - When time_between_check_use_default is false, at least one time value must be > 0 + - Values must be valid integers + """ + import json + from flask import url_for + + api_key = live_server.app.config['DATASTORE'].data['settings']['application'].get('api_access_token') + + # Test 1: time_between_check_use_default=false with NO time_between_check should fail + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example.com", + "time_between_check_use_default": False + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 400, "Should fail when time_between_check_use_default=false with no time_between_check" + assert b"At least one time interval" in res.data, "Error message should mention time interval requirement" + + # Test 2: time_between_check_use_default=false with ALL zeros should fail + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example.com", + "time_between_check_use_default": False, + "time_between_check": { + "weeks": 0, + "days": 0, + "hours": 0, + "minutes": 0, + "seconds": 0 + } + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 400, "Should fail when all time values are 0" + assert b"At least one time interval" in res.data, "Error message should mention time interval requirement" + + # Test 3: time_between_check_use_default=false with NULL values should fail + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example.com", + "time_between_check_use_default": False, + "time_between_check": { + "weeks": None, + "days": None, + "hours": None, + "minutes": None, + "seconds": None + } + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 400, "Should fail when all time values are null" + assert b"At least one time interval" in res.data, "Error message should mention time interval requirement" + + # Test 4: time_between_check_use_default=false with valid hours should succeed + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example.com", + "time_between_check_use_default": False, + "time_between_check": { + "hours": 2 + } + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 201, "Should succeed with valid hours value" + uuid1 = res.json.get('uuid') + + # Test 5: time_between_check_use_default=false with valid minutes should succeed + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example2.com", + "time_between_check_use_default": False, + "time_between_check": { + "minutes": 30 + } + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 201, "Should succeed with valid minutes value" + uuid2 = res.json.get('uuid') + + # Test 6: time_between_check_use_default=true (or missing) with no time_between_check should succeed (uses defaults) + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example3.com", + "time_between_check_use_default": True + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 201, "Should succeed when using default settings" + uuid3 = res.json.get('uuid') + + # Test 7: Default behavior (no time_between_check_use_default field) should use defaults and succeed + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example4.com" + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 201, "Should succeed with default behavior (using global settings)" + uuid4 = res.json.get('uuid') + + # Test 8: Verify integer type validation - string should fail (OpenAPI validation) + res = client.post( + url_for("createwatch"), + data=json.dumps({ + "url": "https://example5.com", + "time_between_check_use_default": False, + "time_between_check": { + "hours": "not_a_number" + } + }), + headers={'content-type': 'application/json', 'x-api-key': api_key}, + ) + assert res.status_code == 400, "Should fail when time value is not an integer" + assert b"Validation failed" in res.data or b"not of type" in res.data, "Should mention validation/type error" + + # Cleanup + for uuid in [uuid1, uuid2, uuid3, uuid4]: + client.delete( + url_for("watch", uuid=uuid), + headers={'x-api-key': api_key}, + ) diff --git a/changedetectionio/tests/test_api_notification_urls_validation.py b/changedetectionio/tests/test_api_notification_urls_validation.py index 6d62e09c2..0f56dfd68 100644 --- a/changedetectionio/tests/test_api_notification_urls_validation.py +++ b/changedetectionio/tests/test_api_notification_urls_validation.py @@ -107,7 +107,7 @@ def test_watch_notification_urls_validation(client, live_server, measure_memory_ headers={'content-type': 'application/json', 'x-api-key': api_key} ) assert res.status_code == 400, "Should reject non-list notification_urls" - assert b"OpenAPI validation failed" in res.data or b"Request body validation error" in res.data + assert b"Validation failed" in res.data or b"is not of type" in res.data # Test 6: Verify original URLs are preserved after failed update res = client.get( @@ -159,7 +159,7 @@ def test_tag_notification_urls_validation(client, live_server, measure_memory_us headers={'content-type': 'application/json', 'x-api-key': api_key} ) assert res.status_code == 400, "Should reject non-list notification_urls" - assert b"OpenAPI validation failed" in res.data or b"Request body validation error" in res.data + assert b"Validation failed" in res.data or b"is not of type" in res.data # Test 4: Verify original URLs are preserved after failed update tag = datastore.data['settings']['application']['tags'][tag_uuid] diff --git a/changedetectionio/tests/test_api_openapi.py b/changedetectionio/tests/test_api_openapi.py index e5b22c051..837cab0f8 100644 --- a/changedetectionio/tests/test_api_openapi.py +++ b/changedetectionio/tests/test_api_openapi.py @@ -26,7 +26,7 @@ def test_openapi_validation_invalid_content_type_on_create_watch(client, live_se # Should get 400 error due to OpenAPI validation failure assert res.status_code == 400, f"Expected 400 but got {res.status_code}" - assert b"OpenAPI validation failed" in res.data, "Should contain OpenAPI validation error message" + assert b"Validation failed" in res.data, "Should contain validation error message" def test_openapi_validation_missing_required_field_create_watch(client, live_server, measure_memory_usage, datastore_path): @@ -43,7 +43,7 @@ def test_openapi_validation_missing_required_field_create_watch(client, live_ser # Should get 400 error due to missing required field assert res.status_code == 400, f"Expected 400 but got {res.status_code}" - assert b"OpenAPI validation failed" in res.data, "Should contain OpenAPI validation error message" + assert b"Validation failed" in res.data, "Should contain validation error message" def test_openapi_validation_invalid_field_in_request_body(client, live_server, measure_memory_usage, datastore_path): @@ -80,10 +80,9 @@ def test_openapi_validation_invalid_field_in_request_body(client, live_server, m # Should get 400 error due to invalid field (this will be caught by internal validation) # Note: This tests the flow where OpenAPI validation passes but internal validation catches it assert res.status_code == 400, f"Expected 400 but got {res.status_code}" - # With patternProperties for processor_config_*, the error message format changed slightly - assert (b"Additional properties are not allowed" in res.data or - b"does not match any of the regexes" in res.data), \ - "Should contain validation error about additional/invalid properties" + # Backend validation now returns "Unknown field(s):" message + assert b"Unknown field" in res.data, \ + "Should contain validation error about unknown fields" def test_openapi_validation_import_wrong_content_type(client, live_server, measure_memory_usage, datastore_path): @@ -100,7 +99,7 @@ def test_openapi_validation_import_wrong_content_type(client, live_server, measu # Should get 400 error due to content-type mismatch assert res.status_code == 400, f"Expected 400 but got {res.status_code}" - assert b"OpenAPI validation failed" in res.data, "Should contain OpenAPI validation error message" + assert b"Validation failed" in res.data, "Should contain validation error message" def test_openapi_validation_import_correct_content_type_succeeds(client, live_server, measure_memory_usage, datastore_path): @@ -158,7 +157,7 @@ def test_openapi_validation_create_tag_missing_required_title(client, live_serve # Should get 400 error due to missing required field assert res.status_code == 400, f"Expected 400 but got {res.status_code}" - assert b"OpenAPI validation failed" in res.data, "Should contain OpenAPI validation error message" + assert b"Validation failed" in res.data, "Should contain validation error message" def test_openapi_validation_watch_update_allows_partial_updates(client, live_server, measure_memory_usage, datastore_path): diff --git a/changedetectionio/tests/test_api_tags.py b/changedetectionio/tests/test_api_tags.py index 5a5253939..bf2823efd 100644 --- a/changedetectionio/tests/test_api_tags.py +++ b/changedetectionio/tests/test_api_tags.py @@ -176,4 +176,57 @@ def test_api_tags_listing(client, live_server, measure_memory_usage, datastore_p assert res.status_code == 204 +def test_roundtrip_API(client, live_server, measure_memory_usage, datastore_path): + """ + Test the full round trip, this way we test the default Model fits back into OpenAPI spec + :param client: + :param live_server: + :param measure_memory_usage: + :param datastore_path: + :return: + """ + api_key = live_server.app.config['DATASTORE'].data['settings']['application'].get('api_access_token') + set_original_response(datastore_path=datastore_path) + + res = client.post( + url_for("tag"), + data=json.dumps({"title": "My tag title"}), + headers={'content-type': 'application/json', 'x-api-key': api_key} + ) + assert res.status_code == 201 + + uuid = res.json.get('uuid') + + # Now fetch it and send it back + + res = client.get( + url_for("tag", uuid=uuid), + headers={'x-api-key': api_key} + ) + + tag = res.json + + # Only test with date_created (readOnly field that should be filtered out) + # last_changed is Watch-specific and doesn't apply to Tags + tag['date_created'] = 454444444444 + + # HTTP PUT ( UPDATE an existing watch ) + res = client.put( + url_for("tag", uuid=uuid), + headers={'x-api-key': api_key, 'content-type': 'application/json'}, + data=json.dumps(tag), + ) + if res.status_code != 200: + print(f"\n=== PUT failed with {res.status_code} ===") + print(f"Error: {res.data}") + assert res.status_code == 200, "HTTP PUT update was sent OK" + + # Verify readOnly fields like date_created cannot be overridden + res = client.get( + url_for("tag", uuid=uuid), + headers={'x-api-key': api_key} + ) + date_created = res.json.get('date_created') + assert date_created != 454444444444, "ReadOnly date_created should not be updateable" + assert date_created != "454444444444", "ReadOnly date_created should not be updateable" diff --git a/docs/api-spec.yaml b/docs/api-spec.yaml index 0ee11e0b9..daac3b7e7 100644 --- a/docs/api-spec.yaml +++ b/docs/api-spec.yaml @@ -28,7 +28,7 @@ info: For example: `x-api-key: YOUR_API_KEY` - version: 0.1.5 + version: 0.1.6 contact: name: ChangeDetection.io url: https://github.com/dgtlmoon/changedetection.io @@ -126,13 +126,22 @@ components: WatchBase: type: object properties: + uuid: + type: string + format: uuid + description: Unique identifier + readOnly: true + date_created: + type: [integer, 'null'] + description: Unix timestamp of creation + readOnly: true url: type: string format: uri description: URL to monitor for changes maxLength: 5000 title: - type: string + type: [string, 'null'] description: Custom title for the web page change monitor (watch), not to be confused with page_title maxLength: 5000 tag: @@ -156,56 +165,61 @@ components: description: HTTP method to use fetch_backend: type: string - enum: [html_requests, html_webdriver] - description: Backend to use for fetching content + description: | + Backend to use for fetching content. Common values: + - `system` (default) - Use the system-wide default fetcher + - `html_requests` - Fast requests-based fetcher + - `html_webdriver` - Browser-based fetcher (Playwright/Puppeteer) + - `extra_browser_*` - Custom browser configurations (if configured) + - Plugin-provided fetchers (if installed) + pattern: '^(system|html_requests|html_webdriver|extra_browser_.+)$' + default: system headers: type: object additionalProperties: type: string description: HTTP headers to include in requests body: - type: string + type: [string, 'null'] description: HTTP request body maxLength: 5000 proxy: - type: string + type: [string, 'null'] description: Proxy configuration maxLength: 5000 + ignore_status_codes: + type: [boolean, 'null'] + description: Ignore HTTP status code errors (boolean or null) webdriver_delay: - type: integer + type: [integer, 'null'] description: Delay in seconds for webdriver webdriver_js_execute_code: - type: string + type: [string, 'null'] description: JavaScript code to execute maxLength: 5000 time_between_check: type: object properties: weeks: - type: integer + type: [integer, 'null'] minimum: 0 maximum: 52000 - nullable: true days: - type: integer + type: [integer, 'null'] minimum: 0 maximum: 365000 - nullable: true hours: - type: integer + type: [integer, 'null'] minimum: 0 maximum: 8760000 - nullable: true minutes: - type: integer + type: [integer, 'null'] minimum: 0 maximum: 525600000 - nullable: true seconds: - type: integer + type: [integer, 'null'] minimum: 0 maximum: 31536000000 - nullable: true description: Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings. time_between_check_use_default: type: boolean @@ -219,11 +233,11 @@ components: maxItems: 100 description: Notification URLs for this web page change monitor (watch). Maximum 100 URLs. notification_title: - type: string + type: [string, 'null'] description: Custom notification title maxLength: 5000 notification_body: - type: string + type: [string, 'null'] description: Custom notification body maxLength: 5000 notification_format: @@ -231,7 +245,7 @@ components: enum: ['text', 'html', 'htmlcolor', 'markdown', 'System default'] description: Format for notifications track_ldjson_price_data: - type: boolean + type: [boolean, 'null'] description: Whether to track JSON-LD price data browser_steps: type: array @@ -239,17 +253,14 @@ components: type: object properties: operation: - type: string + type: [string, 'null'] maxLength: 5000 - nullable: true selector: - type: string + type: [string, 'null'] maxLength: 5000 - nullable: true optional_value: - type: string + type: [string, 'null'] maxLength: 5000 - nullable: true required: [operation, selector, optional_value] additionalProperties: false maxItems: 100 @@ -260,16 +271,197 @@ components: default: text_json_diff description: Optional processor mode to use for change detection. Defaults to `text_json_diff` if not specified. + # Content Filtering + include_filters: + type: array + items: + type: string + maxLength: 5000 + maxItems: 100 + description: CSS/XPath selectors to extract specific content from the page + subtractive_selectors: + type: array + items: + type: string + maxLength: 5000 + maxItems: 100 + description: CSS/XPath selectors to remove content from the page + ignore_text: + type: array + items: + type: string + maxLength: 5000 + maxItems: 100 + description: Text patterns to ignore in change detection + trigger_text: + type: array + items: + type: string + maxLength: 5000 + maxItems: 100 + description: Text/regex patterns that must be present to trigger a change + text_should_not_be_present: + type: array + items: + type: string + maxLength: 5000 + maxItems: 100 + description: Text that should NOT be present (triggers alert if found) + extract_text: + type: array + items: + type: string + maxLength: 5000 + maxItems: 100 + description: Regex patterns to extract specific text after filtering + + # Text Processing + trim_text_whitespace: + type: boolean + default: false + description: Strip leading/trailing whitespace from text + sort_text_alphabetically: + type: boolean + default: false + description: Sort lines alphabetically before comparison + remove_duplicate_lines: + type: boolean + default: false + description: Remove duplicate lines from content + check_unique_lines: + type: boolean + default: false + description: Compare against all history for unique lines + strip_ignored_lines: + type: [boolean, 'null'] + description: Remove lines matching ignore patterns + + # Change Detection Filters + filter_text_added: + type: boolean + default: true + description: Include added text in change detection + filter_text_removed: + type: boolean + default: true + description: Include removed text in change detection + filter_text_replaced: + type: boolean + default: true + description: Include replaced text in change detection + + # Restock/Price Detection + in_stock_only: + type: boolean + default: true + description: Only trigger on in-stock transitions (restock_diff processor) + follow_price_changes: + type: boolean + default: true + description: Monitor and track price changes (restock_diff processor) + price_change_threshold_percent: + type: [number, 'null'] + description: Minimum price change percentage to trigger notification + has_ldjson_price_data: + type: [boolean, 'null'] + description: Whether page has LD-JSON price data (auto-detected) + readOnly: true + + # Notifications + notification_screenshot: + type: boolean + default: false + description: Include screenshot in notifications (if supported by notification URL) + filter_failure_notification_send: + type: boolean + default: true + description: Send notification when filters fail to match content + + # History & Display + use_page_title_in_list: + type: [boolean, 'null'] + description: Display page title in watch list (null = use system default) + history_snapshot_max_length: + type: [integer, 'null'] + minimum: 1 + maximum: 1000 + description: Maximum number of history snapshots to keep (null = use system default) + + # Scheduling + time_schedule_limit: + type: object + description: Weekly schedule limiting when checks can run + properties: + enabled: + type: boolean + default: false + monday: + $ref: '#/components/schemas/DaySchedule' + tuesday: + $ref: '#/components/schemas/DaySchedule' + wednesday: + $ref: '#/components/schemas/DaySchedule' + thursday: + $ref: '#/components/schemas/DaySchedule' + friday: + $ref: '#/components/schemas/DaySchedule' + saturday: + $ref: '#/components/schemas/DaySchedule' + sunday: + $ref: '#/components/schemas/DaySchedule' + + # Conditions (advanced logic) + conditions: + type: array + items: + type: object + properties: + field: + type: string + description: Field to check (e.g., 'page_filtered_text', 'page_title') + operator: + type: string + description: Comparison operator (e.g., 'contains_regex', 'equals', 'not_equals') + value: + type: string + description: Value to compare against + required: [field, operator, value] + maxItems: 100 + description: Array of condition rules for change detection logic (empty array when not set) + conditions_match_logic: + type: string + enum: ['ALL', 'ANY'] + default: 'ALL' + description: Logic operator - ALL (match all conditions) or ANY (match any condition) + + DaySchedule: + type: object + properties: + enabled: + type: boolean + default: true + start_time: + type: string + pattern: '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$' + default: '00:00' + description: Start time in HH:MM format + duration: + type: object + properties: + hours: + type: string + pattern: '^[0-9]+$' + default: '24' + minutes: + type: string + pattern: '^[0-9]+$' + default: '00' + Watch: allOf: - $ref: '#/components/schemas/WatchBase' - type: object properties: - uuid: - type: string - format: uuid - description: Unique identifier for the web page change monitor (watch) - readOnly: true last_checked: type: integer description: Unix timestamp of last check @@ -278,9 +470,10 @@ components: type: integer description: Unix timestamp of last change readOnly: true + x-computed: true last_error: - type: string - description: Last error message + type: [string, boolean, 'null'] + description: Last error message (false when no error, string when error occurred, null if not checked yet) readOnly: true last_viewed: type: integer @@ -291,6 +484,61 @@ components: format: string description: The watch URL rendered in case of any Jinja2 markup, always use this for listing. readOnly: true + x-computed: true + page_title: + type: [string, 'null'] + description: HTML tag extracted from the page + readOnly: true + check_count: + type: integer + description: Total number of checks performed + readOnly: true + fetch_time: + type: number + description: Duration of last fetch in seconds + readOnly: true + previous_md5: + type: [string, boolean] + description: MD5 hash of previous content (false if not set) + readOnly: true + previous_md5_before_filters: + type: [string, boolean] + description: MD5 hash before filters applied (false if not set) + readOnly: true + consecutive_filter_failures: + type: integer + description: Counter for consecutive filter match failures + readOnly: true + last_notification_error: + type: [string, 'null'] + description: Last notification error message + readOnly: true + notification_alert_count: + type: integer + description: Number of notifications sent + readOnly: true + content-type: + type: [string, 'null'] + description: Content-Type from last fetch + readOnly: true + remote_server_reply: + type: [string, 'null'] + description: Server header from last response + readOnly: true + browser_steps_last_error_step: + type: [integer, 'null'] + description: Last browser step that caused an error + readOnly: true + viewed: + type: [integer, boolean] + description: Computed property - true if watch has been viewed, false otherwise (deprecated, use last_viewed instead) + readOnly: true + x-computed: true + history_n: + type: integer + description: Number of history snapshots available + readOnly: true + x-computed: true CreateWatch: allOf: @@ -301,34 +549,45 @@ components: UpdateWatch: allOf: - - $ref: '#/components/schemas/WatchBase' + - $ref: '#/components/schemas/WatchBase' # Extends WatchBase for user-settable fields - type: object properties: last_viewed: type: integer description: Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than `last_changed` in the "Update watch" endpoint marks the watch as viewed. minimum: 0 + # Note: ReadOnly and @property fields are filtered out in the backend before update + # We don't use unevaluatedProperties:false here to allow roundtrip GET/PUT workflows + # where the response includes computed fields that should be silently ignored 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 web page change monitors (watches) with this tag - notification_muted: - type: boolean - description: Whether notifications are muted for this tag + allOf: + - $ref: '#/components/schemas/WatchBase' + - type: object + properties: + overrides_watch: + type: [boolean, 'null'] + description: | + Whether this tag's settings override watch settings for all watches in this tag/group. + - true: Tag settings override watch settings + - false: Tag settings do not override (watches use their own settings) + - null: Not decided yet / inherit default behavior + # Future: Aggregated statistics from all watches with this tag + # check_count: + # type: integer + # description: Sum of check_count from all watches with this tag + # readOnly: true + # x-computed: true + # last_checked: + # type: integer + # description: Most recent last_checked timestamp from all watches with this tag + # readOnly: true + # x-computed: true + # last_changed: + # type: integer + # description: Most recent last_changed timestamp from all watches with this tag + # readOnly: true + # x-computed: true CreateTag: allOf: diff --git a/docs/api_v1/index.html b/docs/api_v1/index.html index e50456e8c..21b31ebc8 100644 --- a/docs/api_v1/index.html +++ b/docs/api_v1/index.html @@ -276,12 +276,17 @@ data-styled.g59[id="sc-boKDdR"]{content:"jYezsP,"}/*!sc*/ data-styled.g60[id="sc-fOOuSg"]{content:"dbKJYq,"}/*!sc*/ .crXmiY{color:#d41f1c;font-size:0.9em;font-weight:normal;margin-left:20px;line-height:1;}/*!sc*/ data-styled.g62[id="sc-iIvHqT"]{content:"crXmiY,"}/*!sc*/ +.UZcrz{color:#0e7c86;font-family:Courier,monospace;font-size:12px;}/*!sc*/ +.UZcrz::before,.UZcrz::after{content:' ';}/*!sc*/ +data-styled.g65[id="sc-cpclqO"]{content:"UZcrz,"}/*!sc*/ .kMQdIk{border-radius:2px;word-break:break-word;background-color:rgba(51,51,51,0.05);color:rgba(51,51,51,0.9);padding:0 5px;border:1px solid rgba(51,51,51,0.1);font-family:Courier,monospace;}/*!sc*/ +{margin-left:0;}/*!sc*/ data-styled.g66[id="sc-dTWiOz"]{content:"kMQdIk,"}/*!sc*/ .bDfgbe{border-radius:2px;background-color:rgba(104,104,207,0.05);color:rgba(50,50,159,0.9);margin:0 5px;padding:0 5px;border:1px solid rgba(50,50,159,0.1);}/*!sc*/ +{margin-left:0;}/*!sc*/ data-styled.g68[id="sc-goiVcJ"]{content:"bDfgbe,"}/*!sc*/ +.jBrfIx{background-color:transparent;border:0;color:#666;margin-left:5px;border-radius:2px;cursor:pointer;outline-color:#666;font-size:12px;}/*!sc*/ +data-styled.g69[id="sc-gSifMm"]{content:"jBrfIx,"}/*!sc*/ .eA-DYPM{margin:0 5px;vertical-align:text-top;}/*!sc*/ data-styled.g75[id="sc-bBhMX"]{content:"eA-DYPM,"}/*!sc*/ .hRtRoN:after{content:' and ';font-weight:normal;}/*!sc*/ @@ -450,7 +455,7 @@ data-styled.g138[id="sc-enPhjR"]{content:"SikXG,"}/*!sc*/ 55.627 l 55.6165,55.627 -231.245496,231.24803 c -127.185,127.1864 -231.5279,231.248 -231.873,231.248 -0.3451,0 -104.688, -104.0616 -231.873,-231.248 z - " fill="currentColor"></path></g></svg></div></div><div class="sc-fkYqBV buanwU api-content"><div class="sc-dTvVRJ bPmFpz"><div class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU api-info"><h1 class="sc-hwkwBN sc-jCWzJg wYHiz hPcPCj">ChangeDetection.io API<!-- --> <span>(<!-- -->0.1.5<!-- -->)</span></h1><p>Download OpenAPI specification<!-- -->:</p><div class="sc-eVqvcJ sc-fszimp kIppRw kbZred"><div class="sc-erPUmh eAqtbt"><div class="sc-iRTMaw beOrEi"> <span class="sc-jVxTAy hijBKj">URL: <a href="https://github.com/dgtlmoon/changedetection.io">https://github.com/dgtlmoon/changedetection.io</a></span> <span class="sc-jVxTAy hijBKj">License:<!-- --> <a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0</a></span> </div></div></div><div data-role="redoc-summary" html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><div data-role="redoc-description" html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div></div></div></div><div id="section/ChangeDetection.io-Web-page-monitoring-and-notifications-API" data-section-id="section/ChangeDetection.io-Web-page-monitoring-and-notifications-API" class="sc-dTvVRJ bPmFpz"><div class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#section/ChangeDetection.io-Web-page-monitoring-and-notifications-API" aria-label="section/ChangeDetection.io-Web-page-monitoring-and-notifications-API"></a>ChangeDetection.io Web page monitoring and notifications API</h2></div></div><div class="sc-ggWZvA dCzIPc"><div class="sc-eVqvcJ sc-fszimp kIppRw kbZred redoc-markdown " html="<p>REST API for managing Page watches, Group tags, and Notifications.</p> + " fill="currentColor"></path></g></svg></div></div><div class="sc-fkYqBV buanwU api-content"><div class="sc-dTvVRJ bPmFpz"><div class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU api-info"><h1 class="sc-hwkwBN sc-jCWzJg wYHiz hPcPCj">ChangeDetection.io API<!-- --> <span>(<!-- -->0.1.6<!-- -->)</span></h1><p>Download OpenAPI specification<!-- -->:</p><div class="sc-eVqvcJ sc-fszimp kIppRw kbZred"><div class="sc-erPUmh eAqtbt"><div class="sc-iRTMaw beOrEi"> <span class="sc-jVxTAy hijBKj">URL: <a href="https://github.com/dgtlmoon/changedetection.io">https://github.com/dgtlmoon/changedetection.io</a></span> <span class="sc-jVxTAy hijBKj">License:<!-- --> <a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache 2.0</a></span> </div></div></div><div data-role="redoc-summary" html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><div data-role="redoc-description" html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div></div></div></div><div id="section/ChangeDetection.io-Web-page-monitoring-and-notifications-API" data-section-id="section/ChangeDetection.io-Web-page-monitoring-and-notifications-API" class="sc-dTvVRJ bPmFpz"><div class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#section/ChangeDetection.io-Web-page-monitoring-and-notifications-API" aria-label="section/ChangeDetection.io-Web-page-monitoring-and-notifications-API"></a>ChangeDetection.io Web page monitoring and notifications API</h2></div></div><div class="sc-ggWZvA dCzIPc"><div class="sc-eVqvcJ sc-fszimp kIppRw kbZred redoc-markdown " html="<p>REST API for managing Page watches, Group tags, and Notifications.</p> <p>changedetection.io can be driven by its built in simple API, in the examples below you will also find <code>curl</code> command line and <code>python</code> examples to help you get started faster.</p> "><p>REST API for managing Page watches, Group tags, and Notifications.</p> <p>changedetection.io can be driven by its built in simple API, in the examples below you will also find <code>curl</code> command line and <code>python</code> examples to help you get started faster.</p> @@ -508,7 +513,7 @@ notification preferences, and content filtering options.</p> </ul> </div></div><div class="sc-ikkVnJ deUlC"><div class="sc-hWgKua dPSGXF"><h5 class="sc-eqYatC sc-gFqXPY czjApA jCoZLr">Authorizations:</h5><svg class="sc-dntSTA FtowP" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-jBaHRL fUkQtw"><span class="sc-iVnIWt gRXavu"><span class="sc-hqtLyI hRtRoN"><i>ApiKeyAuth</i></span></span></div></div><h5 class="sc-eqYatC czjApA">Request Body schema: <span class="sc-dNFkOE cFlAeY">application/json</span><div class="sc-bEjUoa sc-iIvHqT sc-eTCgfj lhyyLL crXmiY foplsk">required</div></h5><div html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><table class="sc-eqNDNG icJLQx"><tbody><tr class=""><td kind="field" title="url" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">url</span><div class="sc-bEjUoa sc-iIvHqT lhyyLL crXmiY">required</div></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uri<!-- -->><!-- --> </span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>URL to monitor for changes</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>URL to monitor for changes</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> </div></div></div></td></tr><tr class=""><td kind="field" title="tag" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">tag</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Tag UUID to associate with this web page change monitor (watch)</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag UUID to associate with this web page change monitor (watch)</p> @@ -520,17 +525,33 @@ notification preferences, and content filtering options.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether notifications are muted</p> </div></div></div></td></tr><tr class=""><td kind="field" title="method" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">method</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"GET"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"POST"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"DELETE"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"PUT"</span> </div> <div><div html="<p>HTTP method to use</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP method to use</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="fetch_backend" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">fetch_backend</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html_requests"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html_webdriver"</span> </div> <div><div html="<p>Backend to use for fetching content</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Backend to use for fetching content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="fetch_backend" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">fetch_backend</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-cpclqO lhyyLL UZcrz">^(system|html_requests|html_webdriver|extra_b...</span><button class="sc-gSifMm jBrfIx">Show pattern</button></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"system"</span></div> <div><div html="<p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> </div></div></div></td></tr><tr class=""><td kind="field" title="headers" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand headers"><span class="property-name">headers</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>HTTP headers to include in requests</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP headers to include in requests</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>HTTP request body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>HTTP request body</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP request body</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="proxy" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">proxy</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Proxy configuration</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="proxy" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">proxy</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Proxy configuration</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Proxy configuration</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_delay" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_delay</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer</span></div> <div><div html="<p>Delay in seconds for webdriver</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_status_codes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_status_codes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Ignore HTTP status code errors (boolean or null)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Ignore HTTP status code errors (boolean or null)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_delay" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_delay</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span></div> <div><div html="<p>Delay in seconds for webdriver</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Delay in seconds for webdriver</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_js_execute_code" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_js_execute_code</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>JavaScript code to execute</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_js_execute_code" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_js_execute_code</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>JavaScript code to execute</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>JavaScript code to execute</p> </div></div></div></td></tr><tr class=""><td kind="field" title="time_between_check" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_between_check"><span class="property-name">time_between_check</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> @@ -538,18 +559,66 @@ notification preferences, and content filtering options.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to use global settings for time between checks - defaults to true if not set</p> </div></div></div></td></tr><tr class=""><td kind="field" title="notification_urls" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_urls</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 1000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="notification_title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification title</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification title</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="notification_body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification body</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification body</p> </div></div></div></td></tr><tr class=""><td kind="field" title="notification_format" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_format</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"htmlcolor"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"markdown"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"System default"</span> </div> <div><div html="<p>Format for notifications</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Format for notifications</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="track_ldjson_price_data" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">track_ldjson_price_data</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether to track JSON-LD price data</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="track_ldjson_price_data" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">track_ldjson_price_data</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Whether to track JSON-LD price data</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to track JSON-LD price data</p> </div></div></div></td></tr><tr class=""><td kind="field" title="browser_steps" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand browser_steps"><span class="property-name">browser_steps</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Browser automation steps. Maximum 100 steps allowed.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Browser automation steps. Maximum 100 steps allowed.</p> -</div></div></div></td></tr><tr class="last "><td kind="field" title="processor" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">processor</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"restock_diff"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span> </div> <div><div html="<p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="processor" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">processor</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"restock_diff"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span> </div> <div><div html="<p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="include_filters" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">include_filters</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to extract specific content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to extract specific content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="subtractive_selectors" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">subtractive_selectors</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to remove content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to remove content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text patterns to ignore in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text patterns to ignore in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trigger_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trigger_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text/regex patterns that must be present to trigger a change</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text/regex patterns that must be present to trigger a change</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="text_should_not_be_present" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">text_should_not_be_present</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text that should NOT be present (triggers alert if found)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text that should NOT be present (triggers alert if found)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="extract_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">extract_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Regex patterns to extract specific text after filtering</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Regex patterns to extract specific text after filtering</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trim_text_whitespace" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trim_text_whitespace</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Strip leading/trailing whitespace from text</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Strip leading/trailing whitespace from text</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="sort_text_alphabetically" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">sort_text_alphabetically</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Sort lines alphabetically before comparison</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Sort lines alphabetically before comparison</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="remove_duplicate_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">remove_duplicate_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Remove duplicate lines from content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove duplicate lines from content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="check_unique_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">check_unique_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Compare against all history for unique lines</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Compare against all history for unique lines</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="strip_ignored_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">strip_ignored_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Remove lines matching ignore patterns</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove lines matching ignore patterns</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_added" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_added</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include added text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include added text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_removed" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_removed</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include removed text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include removed text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_replaced" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_replaced</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include replaced text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include replaced text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="in_stock_only" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">in_stock_only</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Only trigger on in-stock transitions (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Only trigger on in-stock transitions (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="follow_price_changes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">follow_price_changes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Monitor and track price changes (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Monitor and track price changes (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="price_change_threshold_percent" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">price_change_threshold_percent</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">number or null</span></div> <div><div html="<p>Minimum price change percentage to trigger notification</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Minimum price change percentage to trigger notification</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_screenshot" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_screenshot</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Include screenshot in notifications (if supported by notification URL)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include screenshot in notifications (if supported by notification URL)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_failure_notification_send" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_failure_notification_send</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Send notification when filters fail to match content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Send notification when filters fail to match content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="use_page_title_in_list" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">use_page_title_in_list</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Display page title in watch list (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Display page title in watch list (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="history_snapshot_max_length" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">history_snapshot_max_length</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- -->[ 1 .. 1000 ]<!-- --> </span></span></div> <div><div html="<p>Maximum number of history snapshots to keep (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Maximum number of history snapshots to keep (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_schedule_limit" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_schedule_limit"><span class="property-name">time_schedule_limit</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Weekly schedule limiting when checks can run</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Weekly schedule limiting when checks can run</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="conditions" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand conditions"><span class="property-name">conditions</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Array of condition rules for change detection logic (empty array when not set)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Array of condition rules for change detection logic (empty array when not set)</p> +</div></div></div></td></tr><tr class="last "><td kind="field" title="conditions_match_logic" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">conditions_match_logic</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ANY"</span> </div> <div><div html="<p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> </div></div></div></td></tr></tbody></table><div><h3 class="sc-gDzyrw kjrVcG">Responses</h3><div><button class="sc-jIDBmd lkmdtA"><svg class="sc-dntSTA cGxVlA" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-eJvlPh fBhAXU">200<!-- --> </strong><div html="<p>Web page change monitor (watch) created successfully</p> " class="sc-eVqvcJ sc-fszimp sc-etsjJW kIppRw jnwENr ljKHqG"><p>Web page change monitor (watch) created successfully</p> </div></button></div><div><button class="sc-jIDBmd ifAHvq"><svg class="sc-dntSTA jKYZgc" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-eJvlPh fBhAXU">500<!-- --> </strong><div html="<p>Server error</p> @@ -582,13 +651,13 @@ notification preferences, and content filtering options.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom server</p> </div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>{protocol}://{host}/api/v1</span>/watch/{uuid}</div></div></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Request samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab_R_2abha_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2abha_0" tabindex="0" data-rttab="true">curl</li><li class="react-tabs__tab" role="tab" id="tab_R_2abha_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2abha_1" data-rttab="true">Python</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2abha_0" aria-labelledby="tab_R_2abha_0"><div class="sc-cdmAjP gsEOpk"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button></div><pre class="sc-eVqvcJ sc-jytpVa kIppRw cCzeOT">curl <span class="token operator">-</span>X GET <span class="token string">"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f"</span> \ <span class="token operator">-</span>H <span class="token string">"x-api-key: YOUR_API_KEY"</span> -</pre></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2abha_1" aria-labelledby="tab_R_2abha_1"></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Response samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab_R_2ebha_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2ebha_0" tabindex="0" data-rttab="true">200</li><li class="tab-error" role="tab" id="tab_R_2ebha_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2ebha_1" data-rttab="true">404</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2ebha_0" aria-labelledby="tab_R_2ebha_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-cCVJLD sc-gsJsQu dbfEBv ehbHlf"><svg class="sc-pYNGo eyTvTk" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg><select class="dropdown-select"><option value="application/json" selected="">application/json</option><option value="text/plain">text/plain</option></select><label>application/json</label></div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"url"</span>: <span class="token string">"</span><a href="http://example.com">http://example.com</a><span class="token string">"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tag"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tags"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"paused"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"method"</span>: <span class="token string">"GET"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"fetch_backend"</span>: <span class="token string">"html_requests"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"headers"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"property1"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"property2"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"proxy"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_delay"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_js_execute_code"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"weeks"</span>: <span class="token number">52000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"days"</span>: <span class="token number">365000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token number">8760000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token number">525600000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"seconds"</span>: <span class="token number">31536000000</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check_use_default"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_format"</span>: <span class="token string">"text"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"track_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"browser_steps"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"operation"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"selector"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"optional_value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"processor"</span>: <span class="token string">"restock_diff"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"uuid"</span>: <span class="token string">"095be615-a8ad-4c33-8e9c-c7612fbf6c9f"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_checked"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_changed"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_error"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_viewed"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"link"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2ebha_1" aria-labelledby="tab_R_2ebha_1"></div></div></div></div></div></div><div id="tag/Watch-Management/operation/updateWatch" data-section-id="tag/Watch-Management/operation/updateWatch" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/updateWatch" id="operation/updateWatch" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Watch-Management/operation/updateWatch" aria-label="tag/Watch-Management/operation/updateWatch"></a>Update watch<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Update an existing web page change monitor (watch) using JSON. Accepts the same structure as returned in <a href="#operation/getWatch">get single watch information</a>.</p> +</pre></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2abha_1" aria-labelledby="tab_R_2abha_1"></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Response samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab_R_2ebha_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2ebha_0" tabindex="0" data-rttab="true">200</li><li class="tab-error" role="tab" id="tab_R_2ebha_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2ebha_1" data-rttab="true">404</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2ebha_0" aria-labelledby="tab_R_2ebha_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-cCVJLD sc-gsJsQu dbfEBv ehbHlf"><svg class="sc-pYNGo eyTvTk" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg><select class="dropdown-select"><option value="application/json" selected="">application/json</option><option value="text/plain">text/plain</option></select><label>application/json</label></div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"uuid"</span>: <span class="token string">"095be615-a8ad-4c33-8e9c-c7612fbf6c9f"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"date_created"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"url"</span>: <span class="token string">"</span><a href="http://example.com">http://example.com</a><span class="token string">"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tag"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tags"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"paused"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"method"</span>: <span class="token string">"GET"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"fetch_backend"</span>: <span class="token string">"system"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"headers"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"property1"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"property2"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"proxy"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_status_codes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_delay"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_js_execute_code"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"weeks"</span>: <span class="token number">52000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"days"</span>: <span class="token number">365000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token number">8760000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token number">525600000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"seconds"</span>: <span class="token number">31536000000</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check_use_default"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_format"</span>: <span class="token string">"text"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"track_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"browser_steps"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"operation"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"selector"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"optional_value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"processor"</span>: <span class="token string">"restock_diff"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"include_filters"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"subtractive_selectors"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trigger_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"text_should_not_be_present"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"extract_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trim_text_whitespace"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"sort_text_alphabetically"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"remove_duplicate_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"check_unique_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"strip_ignored_lines"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_added"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_removed"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_replaced"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"in_stock_only"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"follow_price_changes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"price_change_threshold_percent"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"has_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_screenshot"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_failure_notification_send"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"use_page_title_in_list"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"history_snapshot_max_length"</span>: <span class="token number">1</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_schedule_limit"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"monday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"tuesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"wednesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"thursday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"friday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"saturday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"sunday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"field"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"operator"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions_match_logic"</span>: <span class="token string">"ALL"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_checked"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_changed"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_error"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_viewed"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"link"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"page_title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"check_count"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"fetch_time"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"previous_md5"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"previous_md5_before_filters"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"consecutive_filter_failures"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_notification_error"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_alert_count"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"content-type"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"remote_server_reply"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"browser_steps_last_error_step"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"viewed"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"history_n"</span>: <span class="token number">0</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2ebha_1" aria-labelledby="tab_R_2ebha_1"></div></div></div></div></div></div><div id="tag/Watch-Management/operation/updateWatch" data-section-id="tag/Watch-Management/operation/updateWatch" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/updateWatch" id="operation/updateWatch" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Watch-Management/operation/updateWatch" aria-label="tag/Watch-Management/operation/updateWatch"></a>Update watch<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Update an existing web page change monitor (watch) using JSON. Accepts the same structure as returned in <a href="#operation/getWatch">get single watch information</a>.</p> " class="sc-eVqvcJ sc-fszimp kIppRw kbZred"><p>Update an existing web page change monitor (watch) using JSON. Accepts the same structure as returned in <a href="#operation/getWatch">get single watch information</a>.</p> </div></div><div class="sc-ikkVnJ deUlC"><div class="sc-hWgKua dPSGXF"><h5 class="sc-eqYatC sc-gFqXPY czjApA jCoZLr">Authorizations:</h5><svg class="sc-dntSTA FtowP" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-jBaHRL fUkQtw"><span class="sc-iVnIWt gRXavu"><span class="sc-hqtLyI hRtRoN"><i>ApiKeyAuth</i></span></span></div></div><div><h5 class="sc-eqYatC czjApA">path<!-- --> Parameters</h5><table class="sc-eqNDNG icJLQx"><tbody><tr class="last "><td kind="field" title="uuid" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">uuid</span><div class="sc-bEjUoa sc-iIvHqT lhyyLL crXmiY">required</div></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uuid<!-- -->><!-- --> </span></div> <div><div html="<p>Web page change monitor (watch) unique ID</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Web page change monitor (watch) unique ID</p> </div></div></div></td></tr></tbody></table></div><h5 class="sc-eqYatC czjApA">Request Body schema: <span class="sc-dNFkOE cFlAeY">application/json</span><div class="sc-bEjUoa sc-iIvHqT sc-eTCgfj lhyyLL crXmiY foplsk">required</div></h5><div html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><table class="sc-eqNDNG icJLQx"><tbody><tr class=""><td kind="field" title="url" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">url</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uri<!-- -->><!-- --> </span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>URL to monitor for changes</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>URL to monitor for changes</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> </div></div></div></td></tr><tr class=""><td kind="field" title="tag" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">tag</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Tag UUID to associate with this web page change monitor (watch)</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag UUID to associate with this web page change monitor (watch)</p> @@ -600,17 +669,33 @@ notification preferences, and content filtering options.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether notifications are muted</p> </div></div></div></td></tr><tr class=""><td kind="field" title="method" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">method</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"GET"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"POST"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"DELETE"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"PUT"</span> </div> <div><div html="<p>HTTP method to use</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP method to use</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="fetch_backend" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">fetch_backend</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html_requests"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html_webdriver"</span> </div> <div><div html="<p>Backend to use for fetching content</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Backend to use for fetching content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="fetch_backend" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">fetch_backend</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-cpclqO lhyyLL UZcrz">^(system|html_requests|html_webdriver|extra_b...</span><button class="sc-gSifMm jBrfIx">Show pattern</button></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"system"</span></div> <div><div html="<p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> </div></div></div></td></tr><tr class=""><td kind="field" title="headers" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand headers"><span class="property-name">headers</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>HTTP headers to include in requests</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP headers to include in requests</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>HTTP request body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>HTTP request body</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP request body</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="proxy" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">proxy</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Proxy configuration</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="proxy" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">proxy</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Proxy configuration</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Proxy configuration</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_delay" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_delay</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer</span></div> <div><div html="<p>Delay in seconds for webdriver</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_status_codes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_status_codes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Ignore HTTP status code errors (boolean or null)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Ignore HTTP status code errors (boolean or null)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_delay" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_delay</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span></div> <div><div html="<p>Delay in seconds for webdriver</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Delay in seconds for webdriver</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_js_execute_code" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_js_execute_code</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>JavaScript code to execute</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_js_execute_code" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_js_execute_code</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>JavaScript code to execute</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>JavaScript code to execute</p> </div></div></div></td></tr><tr class=""><td kind="field" title="time_between_check" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_between_check"><span class="property-name">time_between_check</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> @@ -618,18 +703,66 @@ notification preferences, and content filtering options.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to use global settings for time between checks - defaults to true if not set</p> </div></div></div></td></tr><tr class=""><td kind="field" title="notification_urls" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_urls</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 1000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="notification_title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification title</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification title</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="notification_body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification body</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification body</p> </div></div></div></td></tr><tr class=""><td kind="field" title="notification_format" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_format</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"htmlcolor"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"markdown"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"System default"</span> </div> <div><div html="<p>Format for notifications</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Format for notifications</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="track_ldjson_price_data" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">track_ldjson_price_data</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether to track JSON-LD price data</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="track_ldjson_price_data" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">track_ldjson_price_data</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Whether to track JSON-LD price data</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to track JSON-LD price data</p> </div></div></div></td></tr><tr class=""><td kind="field" title="browser_steps" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand browser_steps"><span class="property-name">browser_steps</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Browser automation steps. Maximum 100 steps allowed.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Browser automation steps. Maximum 100 steps allowed.</p> </div></div></div></td></tr><tr class=""><td kind="field" title="processor" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">processor</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"restock_diff"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span> </div> <div><div html="<p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="include_filters" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">include_filters</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to extract specific content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to extract specific content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="subtractive_selectors" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">subtractive_selectors</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to remove content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to remove content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text patterns to ignore in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text patterns to ignore in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trigger_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trigger_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text/regex patterns that must be present to trigger a change</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text/regex patterns that must be present to trigger a change</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="text_should_not_be_present" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">text_should_not_be_present</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text that should NOT be present (triggers alert if found)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text that should NOT be present (triggers alert if found)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="extract_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">extract_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Regex patterns to extract specific text after filtering</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Regex patterns to extract specific text after filtering</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trim_text_whitespace" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trim_text_whitespace</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Strip leading/trailing whitespace from text</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Strip leading/trailing whitespace from text</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="sort_text_alphabetically" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">sort_text_alphabetically</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Sort lines alphabetically before comparison</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Sort lines alphabetically before comparison</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="remove_duplicate_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">remove_duplicate_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Remove duplicate lines from content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove duplicate lines from content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="check_unique_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">check_unique_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Compare against all history for unique lines</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Compare against all history for unique lines</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="strip_ignored_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">strip_ignored_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Remove lines matching ignore patterns</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove lines matching ignore patterns</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_added" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_added</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include added text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include added text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_removed" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_removed</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include removed text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include removed text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_replaced" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_replaced</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include replaced text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include replaced text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="in_stock_only" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">in_stock_only</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Only trigger on in-stock transitions (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Only trigger on in-stock transitions (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="follow_price_changes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">follow_price_changes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Monitor and track price changes (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Monitor and track price changes (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="price_change_threshold_percent" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">price_change_threshold_percent</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">number or null</span></div> <div><div html="<p>Minimum price change percentage to trigger notification</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Minimum price change percentage to trigger notification</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_screenshot" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_screenshot</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Include screenshot in notifications (if supported by notification URL)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include screenshot in notifications (if supported by notification URL)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_failure_notification_send" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_failure_notification_send</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Send notification when filters fail to match content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Send notification when filters fail to match content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="use_page_title_in_list" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">use_page_title_in_list</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Display page title in watch list (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Display page title in watch list (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="history_snapshot_max_length" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">history_snapshot_max_length</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- -->[ 1 .. 1000 ]<!-- --> </span></span></div> <div><div html="<p>Maximum number of history snapshots to keep (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Maximum number of history snapshots to keep (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_schedule_limit" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_schedule_limit"><span class="property-name">time_schedule_limit</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Weekly schedule limiting when checks can run</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Weekly schedule limiting when checks can run</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="conditions" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand conditions"><span class="property-name">conditions</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Array of condition rules for change detection logic (empty array when not set)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Array of condition rules for change detection logic (empty array when not set)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="conditions_match_logic" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">conditions_match_logic</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ANY"</span> </div> <div><div html="<p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> </div></div></div></td></tr><tr class="last "><td kind="field" title="last_viewed" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">last_viewed</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- -->>= 0<!-- --> </span></span></div> <div><div html="<p>Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than <code>last_changed</code> in the &quot;Update watch&quot; endpoint marks the watch as viewed.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than <code>last_changed</code> in the "Update watch" endpoint marks the watch as viewed.</p> </div></div></div></td></tr></tbody></table><div><h3 class="sc-gDzyrw kjrVcG">Responses</h3><div><button class="sc-jIDBmd lkmdtA"><svg class="sc-dntSTA cGxVlA" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-eJvlPh fBhAXU">200<!-- --> </strong><div html="<p>Web page change monitor (watch) updated successfully</p> @@ -642,7 +775,7 @@ notification preferences, and content filtering options.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Production server</p> </div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>https://yourdomain.com/api/v1</span>/watch/{uuid}</div></div></div><div class="sc-iyBeIh icOxsG"><div html="<p>Custom server</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom server</p> -</div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>{protocol}://{host}/api/v1</span>/watch/{uuid}</div></div></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Request samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab_R_2acha_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2acha_0" tabindex="0" data-rttab="true">Payload</li><li class="react-tabs__tab" role="tab" id="tab_R_2acha_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acha_1" data-rttab="true">curl</li><li class="react-tabs__tab" role="tab" id="tab_R_2acha_2" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acha_2" data-rttab="true">Python</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2acha_0" aria-labelledby="tab_R_2acha_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-bAehkN iNRAJK">application/json</div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"url"</span>: <span class="token string">"</span><a href="http://example.com">http://example.com</a><span class="token string">"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tag"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tags"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"paused"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"method"</span>: <span class="token string">"GET"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"fetch_backend"</span>: <span class="token string">"html_requests"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"headers"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"property1"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"property2"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"proxy"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_delay"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_js_execute_code"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"weeks"</span>: <span class="token number">52000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"days"</span>: <span class="token number">365000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token number">8760000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token number">525600000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"seconds"</span>: <span class="token number">31536000000</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check_use_default"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_format"</span>: <span class="token string">"text"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"track_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"browser_steps"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"operation"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"selector"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"optional_value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"processor"</span>: <span class="token string">"restock_diff"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_viewed"</span>: <span class="token number">0</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acha_1" aria-labelledby="tab_R_2acha_1"></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acha_2" aria-labelledby="tab_R_2acha_2"></div></div></div></div></div></div><div id="tag/Watch-Management/operation/deleteWatch" data-section-id="tag/Watch-Management/operation/deleteWatch" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/deleteWatch" id="operation/deleteWatch" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Watch-Management/operation/deleteWatch" aria-label="tag/Watch-Management/operation/deleteWatch"></a>Delete watch<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Delete a web page change monitor (watch) and all related history</p> +</div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>{protocol}://{host}/api/v1</span>/watch/{uuid}</div></div></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Request samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab_R_2acha_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2acha_0" tabindex="0" data-rttab="true">Payload</li><li class="react-tabs__tab" role="tab" id="tab_R_2acha_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acha_1" data-rttab="true">curl</li><li class="react-tabs__tab" role="tab" id="tab_R_2acha_2" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acha_2" data-rttab="true">Python</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2acha_0" aria-labelledby="tab_R_2acha_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-bAehkN iNRAJK">application/json</div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"url"</span>: <span class="token string">"</span><a href="http://example.com">http://example.com</a><span class="token string">"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tag"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tags"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"paused"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"method"</span>: <span class="token string">"GET"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"fetch_backend"</span>: <span class="token string">"system"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"headers"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"property1"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"property2"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"proxy"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_status_codes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_delay"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_js_execute_code"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"weeks"</span>: <span class="token number">52000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"days"</span>: <span class="token number">365000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token number">8760000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token number">525600000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"seconds"</span>: <span class="token number">31536000000</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check_use_default"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_format"</span>: <span class="token string">"text"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"track_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"browser_steps"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"operation"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"selector"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"optional_value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"processor"</span>: <span class="token string">"restock_diff"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"include_filters"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"subtractive_selectors"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trigger_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"text_should_not_be_present"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"extract_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trim_text_whitespace"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"sort_text_alphabetically"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"remove_duplicate_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"check_unique_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"strip_ignored_lines"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_added"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_removed"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_replaced"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"in_stock_only"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"follow_price_changes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"price_change_threshold_percent"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_screenshot"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_failure_notification_send"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"use_page_title_in_list"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"history_snapshot_max_length"</span>: <span class="token number">1</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_schedule_limit"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"monday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"tuesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"wednesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"thursday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"friday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"saturday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"sunday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"field"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"operator"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions_match_logic"</span>: <span class="token string">"ALL"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"last_viewed"</span>: <span class="token number">0</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acha_1" aria-labelledby="tab_R_2acha_1"></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acha_2" aria-labelledby="tab_R_2acha_2"></div></div></div></div></div></div><div id="tag/Watch-Management/operation/deleteWatch" data-section-id="tag/Watch-Management/operation/deleteWatch" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/deleteWatch" id="operation/deleteWatch" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Watch-Management/operation/deleteWatch" aria-label="tag/Watch-Management/operation/deleteWatch"></a>Delete watch<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Delete a web page change monitor (watch) and all related history</p> " class="sc-eVqvcJ sc-fszimp kIppRw kbZred"><p>Delete a web page change monitor (watch) and all related history</p> </div></div><div class="sc-ikkVnJ deUlC"><div class="sc-hWgKua dPSGXF"><h5 class="sc-eqYatC sc-gFqXPY czjApA jCoZLr">Authorizations:</h5><svg class="sc-dntSTA FtowP" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-jBaHRL fUkQtw"><span class="sc-iVnIWt gRXavu"><span class="sc-hqtLyI hRtRoN"><i>ApiKeyAuth</i></span></span></div></div><div><h5 class="sc-eqYatC czjApA">path<!-- --> Parameters</h5><table class="sc-eqNDNG icJLQx"><tbody><tr class="last "><td kind="field" title="uuid" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">uuid</span><div class="sc-bEjUoa sc-iIvHqT lhyyLL crXmiY">required</div></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uuid<!-- -->><!-- --> </span></div> <div><div html="<p>Web page change monitor (watch) unique ID</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Web page change monitor (watch) unique ID</p> @@ -908,12 +1041,116 @@ multiple related watches.</p> <span class="token operator">-</span>H <span class="token string">"x-api-key: YOUR_API_KEY"</span> </pre></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2a9ja_1" aria-labelledby="tab_R_2a9ja_1"></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Response samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab_R_2e9ja_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2e9ja_0" tabindex="0" data-rttab="true">200</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2e9ja_0" aria-labelledby="tab_R_2e9ja_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-bAehkN iNRAJK">application/json</div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"550e8400-e29b-41d4-a716-446655440000"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"uuid"</span>: <span class="token string">"550e8400-e29b-41d4-a716-446655440000"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"title"</span>: <span class="token string">"Production Sites"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"mailto:admin@example.com"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"notification_muted"</span>: <span class="token boolean">false</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"330e8400-e29b-41d4-a716-446655440001"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"uuid"</span>: <span class="token string">"330e8400-e29b-41d4-a716-446655440001"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"title"</span>: <span class="token string">"News Sources"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"discord://webhook_id/webhook_token"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"notification_muted"</span>: <span class="token boolean">false</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div></div></div></div></div></div><div id="tag/Group-Tag-Management/operation/createTag" data-section-id="tag/Group-Tag-Management/operation/createTag" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/createTag" id="operation/createTag" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Group-Tag-Management/operation/createTag" aria-label="tag/Group-Tag-Management/operation/createTag"></a>Create tag<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Create a single tag/group</p> " class="sc-eVqvcJ sc-fszimp kIppRw kbZred"><p>Create a single tag/group</p> -</div></div><div class="sc-ikkVnJ deUlC"><div class="sc-hWgKua dPSGXF"><h5 class="sc-eqYatC sc-gFqXPY czjApA jCoZLr">Authorizations:</h5><svg class="sc-dntSTA FtowP" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-jBaHRL fUkQtw"><span class="sc-iVnIWt gRXavu"><span class="sc-hqtLyI hRtRoN"><i>ApiKeyAuth</i></span></span></div></div><h5 class="sc-eqYatC czjApA">Request Body schema: <span class="sc-dNFkOE cFlAeY">application/json</span><div class="sc-bEjUoa sc-iIvHqT sc-eTCgfj lhyyLL crXmiY foplsk">required</div></h5><div html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><table class="sc-eqNDNG icJLQx"><tbody><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span><div class="sc-bEjUoa sc-iIvHqT lhyyLL crXmiY">required</div></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Tag title</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag title</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="notification_urls" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_urls</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span></div> <div><div html="<p>Default notification URLs for web page change monitors (watches) with this tag</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Default notification URLs for web page change monitors (watches) with this tag</p> -</div></div></div></td></tr><tr class="last "><td kind="field" title="notification_muted" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_muted</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether notifications are muted for this tag</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether notifications are muted for this tag</p> +</div></div><div class="sc-ikkVnJ deUlC"><div class="sc-hWgKua dPSGXF"><h5 class="sc-eqYatC sc-gFqXPY czjApA jCoZLr">Authorizations:</h5><svg class="sc-dntSTA FtowP" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-jBaHRL fUkQtw"><span class="sc-iVnIWt gRXavu"><span class="sc-hqtLyI hRtRoN"><i>ApiKeyAuth</i></span></span></div></div><h5 class="sc-eqYatC czjApA">Request Body schema: <span class="sc-dNFkOE cFlAeY">application/json</span><div class="sc-bEjUoa sc-iIvHqT sc-eTCgfj lhyyLL crXmiY foplsk">required</div></h5><div html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><table class="sc-eqNDNG icJLQx"><tbody><tr class=""><td kind="field" title="url" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">url</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uri<!-- -->><!-- --> </span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>URL to monitor for changes</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>URL to monitor for changes</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span><div class="sc-bEjUoa sc-iIvHqT lhyyLL crXmiY">required</div></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="tag" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">tag</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Tag UUID to associate with this web page change monitor (watch)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag UUID to associate with this web page change monitor (watch)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="tags" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">tags</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span></div> <div><div html="<p>Array of tag UUIDs</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Array of tag UUIDs</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="paused" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">paused</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether the web page change monitor (watch) is paused</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether the web page change monitor (watch) is paused</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_muted" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_muted</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether notifications are muted</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether notifications are muted</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="method" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">method</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"GET"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"POST"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"DELETE"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"PUT"</span> </div> <div><div html="<p>HTTP method to use</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP method to use</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="fetch_backend" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">fetch_backend</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-cpclqO lhyyLL UZcrz">^(system|html_requests|html_webdriver|extra_b...</span><button class="sc-gSifMm jBrfIx">Show pattern</button></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"system"</span></div> <div><div html="<p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> +</div></div></div></td></tr><tr class=""><td kind="field" title="headers" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand headers"><span class="property-name">headers</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>HTTP headers to include in requests</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP headers to include in requests</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>HTTP request body</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP request body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="proxy" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">proxy</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Proxy configuration</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Proxy configuration</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_status_codes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_status_codes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Ignore HTTP status code errors (boolean or null)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Ignore HTTP status code errors (boolean or null)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_delay" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_delay</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span></div> <div><div html="<p>Delay in seconds for webdriver</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Delay in seconds for webdriver</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_js_execute_code" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_js_execute_code</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>JavaScript code to execute</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>JavaScript code to execute</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_between_check" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_between_check"><span class="property-name">time_between_check</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_between_check_use_default" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">time_between_check_use_default</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Whether to use global settings for time between checks - defaults to true if not set</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to use global settings for time between checks - defaults to true if not set</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_urls" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_urls</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 1000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification title</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification body</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_format" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_format</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"htmlcolor"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"markdown"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"System default"</span> </div> <div><div html="<p>Format for notifications</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Format for notifications</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="track_ldjson_price_data" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">track_ldjson_price_data</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Whether to track JSON-LD price data</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to track JSON-LD price data</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="browser_steps" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand browser_steps"><span class="property-name">browser_steps</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Browser automation steps. Maximum 100 steps allowed.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Browser automation steps. Maximum 100 steps allowed.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="processor" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">processor</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"restock_diff"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span> </div> <div><div html="<p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="include_filters" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">include_filters</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to extract specific content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to extract specific content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="subtractive_selectors" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">subtractive_selectors</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to remove content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to remove content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text patterns to ignore in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text patterns to ignore in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trigger_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trigger_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text/regex patterns that must be present to trigger a change</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text/regex patterns that must be present to trigger a change</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="text_should_not_be_present" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">text_should_not_be_present</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text that should NOT be present (triggers alert if found)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text that should NOT be present (triggers alert if found)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="extract_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">extract_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Regex patterns to extract specific text after filtering</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Regex patterns to extract specific text after filtering</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trim_text_whitespace" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trim_text_whitespace</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Strip leading/trailing whitespace from text</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Strip leading/trailing whitespace from text</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="sort_text_alphabetically" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">sort_text_alphabetically</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Sort lines alphabetically before comparison</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Sort lines alphabetically before comparison</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="remove_duplicate_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">remove_duplicate_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Remove duplicate lines from content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove duplicate lines from content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="check_unique_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">check_unique_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Compare against all history for unique lines</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Compare against all history for unique lines</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="strip_ignored_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">strip_ignored_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Remove lines matching ignore patterns</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove lines matching ignore patterns</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_added" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_added</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include added text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include added text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_removed" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_removed</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include removed text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include removed text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_replaced" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_replaced</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include replaced text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include replaced text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="in_stock_only" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">in_stock_only</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Only trigger on in-stock transitions (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Only trigger on in-stock transitions (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="follow_price_changes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">follow_price_changes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Monitor and track price changes (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Monitor and track price changes (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="price_change_threshold_percent" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">price_change_threshold_percent</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">number or null</span></div> <div><div html="<p>Minimum price change percentage to trigger notification</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Minimum price change percentage to trigger notification</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_screenshot" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_screenshot</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Include screenshot in notifications (if supported by notification URL)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include screenshot in notifications (if supported by notification URL)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_failure_notification_send" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_failure_notification_send</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Send notification when filters fail to match content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Send notification when filters fail to match content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="use_page_title_in_list" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">use_page_title_in_list</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Display page title in watch list (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Display page title in watch list (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="history_snapshot_max_length" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">history_snapshot_max_length</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- -->[ 1 .. 1000 ]<!-- --> </span></span></div> <div><div html="<p>Maximum number of history snapshots to keep (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Maximum number of history snapshots to keep (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_schedule_limit" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_schedule_limit"><span class="property-name">time_schedule_limit</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Weekly schedule limiting when checks can run</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Weekly schedule limiting when checks can run</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="conditions" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand conditions"><span class="property-name">conditions</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Array of condition rules for change detection logic (empty array when not set)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Array of condition rules for change detection logic (empty array when not set)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="conditions_match_logic" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">conditions_match_logic</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ANY"</span> </div> <div><div html="<p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> +</div></div></div></td></tr><tr class="last "><td kind="field" title="overrides_watch" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">overrides_watch</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>If true, this tag&#39;s settings override watch settings for all watches in this tag/group</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>If true, this tag's settings override watch settings for all watches in this tag/group</p> </div></div></div></td></tr></tbody></table><div><h3 class="sc-gDzyrw kjrVcG">Responses</h3><div><button class="sc-jIDBmd lkmdtA"><svg class="sc-dntSTA cGxVlA" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-eJvlPh fBhAXU">201<!-- --> </strong><div html="<p>Tag created successfully</p> " class="sc-eVqvcJ sc-fszimp sc-etsjJW kIppRw jnwENr ljKHqG"><p>Tag created successfully</p> </div></button></div><div><button class="sc-jIDBmd kQCDrg" disabled=""><strong class="sc-eJvlPh fBhAXU">400<!-- --> </strong><div html="<p>Invalid or unsupported tag</p> @@ -944,16 +1181,120 @@ multiple related watches.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom server</p> </div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>{protocol}://{host}/api/v1</span>/tag/{uuid}</div></div></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Request samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab_R_2abja_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2abja_0" tabindex="0" data-rttab="true">curl</li><li class="react-tabs__tab" role="tab" id="tab_R_2abja_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2abja_1" data-rttab="true">Python</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2abja_0" aria-labelledby="tab_R_2abja_0"><div class="sc-cdmAjP gsEOpk"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button></div><pre class="sc-eVqvcJ sc-jytpVa kIppRw cCzeOT">curl <span class="token operator">-</span>X GET <span class="token string">"http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000"</span> \ <span class="token operator">-</span>H <span class="token string">"x-api-key: YOUR_API_KEY"</span> -</pre></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2abja_1" aria-labelledby="tab_R_2abja_1"></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Response samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab_R_2ebja_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2ebja_0" tabindex="0" data-rttab="true">200</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2ebja_0" aria-labelledby="tab_R_2ebja_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-cCVJLD sc-gsJsQu dbfEBv ehbHlf"><svg class="sc-pYNGo eyTvTk" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg><select class="dropdown-select"><option value="application/json" selected="">application/json</option><option value="text/plain">text/plain</option></select><label>application/json</label></div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"uuid"</span>: <span class="token string">"095be615-a8ad-4c33-8e9c-c7612fbf6c9f"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div></div></div></div></div></div><div id="tag/Group-Tag-Management/operation/updateTag" data-section-id="tag/Group-Tag-Management/operation/updateTag" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/updateTag" id="operation/updateTag" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Group-Tag-Management/operation/updateTag" aria-label="tag/Group-Tag-Management/operation/updateTag"></a>Update tag<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Update an existing tag using JSON</p> +</pre></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2abja_1" aria-labelledby="tab_R_2abja_1"></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Response samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab_R_2ebja_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2ebja_0" tabindex="0" data-rttab="true">200</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2ebja_0" aria-labelledby="tab_R_2ebja_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-cCVJLD sc-gsJsQu dbfEBv ehbHlf"><svg class="sc-pYNGo eyTvTk" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg><select class="dropdown-select"><option value="application/json" selected="">application/json</option><option value="text/plain">text/plain</option></select><label>application/json</label></div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"uuid"</span>: <span class="token string">"095be615-a8ad-4c33-8e9c-c7612fbf6c9f"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"date_created"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"url"</span>: <span class="token string">"</span><a href="http://example.com">http://example.com</a><span class="token string">"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tag"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tags"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"paused"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"method"</span>: <span class="token string">"GET"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"fetch_backend"</span>: <span class="token string">"system"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"headers"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"property1"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"property2"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"proxy"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_status_codes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_delay"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_js_execute_code"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"weeks"</span>: <span class="token number">52000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"days"</span>: <span class="token number">365000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token number">8760000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token number">525600000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"seconds"</span>: <span class="token number">31536000000</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check_use_default"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_format"</span>: <span class="token string">"text"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"track_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"browser_steps"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"operation"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"selector"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"optional_value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"processor"</span>: <span class="token string">"restock_diff"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"include_filters"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"subtractive_selectors"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trigger_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"text_should_not_be_present"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"extract_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trim_text_whitespace"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"sort_text_alphabetically"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"remove_duplicate_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"check_unique_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"strip_ignored_lines"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_added"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_removed"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_replaced"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"in_stock_only"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"follow_price_changes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"price_change_threshold_percent"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"has_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_screenshot"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_failure_notification_send"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"use_page_title_in_list"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"history_snapshot_max_length"</span>: <span class="token number">1</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_schedule_limit"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"monday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"tuesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"wednesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"thursday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"friday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"saturday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"sunday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"field"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"operator"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions_match_logic"</span>: <span class="token string">"ALL"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"overrides_watch"</span>: <span class="token boolean">true</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div></div></div></div></div></div><div id="tag/Group-Tag-Management/operation/updateTag" data-section-id="tag/Group-Tag-Management/operation/updateTag" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/updateTag" id="operation/updateTag" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Group-Tag-Management/operation/updateTag" aria-label="tag/Group-Tag-Management/operation/updateTag"></a>Update tag<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Update an existing tag using JSON</p> " class="sc-eVqvcJ sc-fszimp kIppRw kbZred"><p>Update an existing tag using JSON</p> </div></div><div class="sc-ikkVnJ deUlC"><div class="sc-hWgKua dPSGXF"><h5 class="sc-eqYatC sc-gFqXPY czjApA jCoZLr">Authorizations:</h5><svg class="sc-dntSTA FtowP" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-jBaHRL fUkQtw"><span class="sc-iVnIWt gRXavu"><span class="sc-hqtLyI hRtRoN"><i>ApiKeyAuth</i></span></span></div></div><div><h5 class="sc-eqYatC czjApA">path<!-- --> Parameters</h5><table class="sc-eqNDNG icJLQx"><tbody><tr class="last "><td kind="field" title="uuid" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">uuid</span><div class="sc-bEjUoa sc-iIvHqT lhyyLL crXmiY">required</div></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uuid<!-- -->><!-- --> </span></div> <div><div html="<p>Tag unique ID</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag unique ID</p> -</div></div></div></td></tr></tbody></table></div><h5 class="sc-eqYatC czjApA">Request Body schema: <span class="sc-dNFkOE cFlAeY">application/json</span><div class="sc-bEjUoa sc-iIvHqT sc-eTCgfj lhyyLL crXmiY foplsk">required</div></h5><div html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><table class="sc-eqNDNG icJLQx"><tbody><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Tag title</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag title</p> -</div></div></div></td></tr><tr class=""><td kind="field" title="notification_urls" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_urls</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span></div> <div><div html="<p>Default notification URLs for web page change monitors (watches) with this tag</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Default notification URLs for web page change monitors (watches) with this tag</p> -</div></div></div></td></tr><tr class="last "><td kind="field" title="notification_muted" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_muted</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether notifications are muted for this tag</p> -" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether notifications are muted for this tag</p> +</div></div></div></td></tr></tbody></table></div><h5 class="sc-eqYatC czjApA">Request Body schema: <span class="sc-dNFkOE cFlAeY">application/json</span><div class="sc-bEjUoa sc-iIvHqT sc-eTCgfj lhyyLL crXmiY foplsk">required</div></h5><div html="" class="sc-eVqvcJ sc-fszimp kIppRw kbZred"></div><table class="sc-eqNDNG icJLQx"><tbody><tr class=""><td kind="field" title="url" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">url</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uri<!-- -->><!-- --> </span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>URL to monitor for changes</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>URL to monitor for changes</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom title for the web page change monitor (watch), not to be confused with page_title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="tag" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">tag</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Tag UUID to associate with this web page change monitor (watch)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag UUID to associate with this web page change monitor (watch)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="tags" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">tags</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span></div> <div><div html="<p>Array of tag UUIDs</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Array of tag UUIDs</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="paused" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">paused</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether the web page change monitor (watch) is paused</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether the web page change monitor (watch) is paused</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_muted" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_muted</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>Whether notifications are muted</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether notifications are muted</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="method" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">method</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"GET"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"POST"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"DELETE"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"PUT"</span> </div> <div><div html="<p>HTTP method to use</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP method to use</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="fetch_backend" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">fetch_backend</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-cpclqO lhyyLL UZcrz">^(system|html_requests|html_webdriver|extra_b...</span><button class="sc-gSifMm jBrfIx">Show pattern</button></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"system"</span></div> <div><div html="<p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Backend to use for fetching content. Common values:</p> +<ul> +<li><code>system</code> (default) - Use the system-wide default fetcher</li> +<li><code>html_requests</code> - Fast requests-based fetcher</li> +<li><code>html_webdriver</code> - Browser-based fetcher (Playwright/Puppeteer)</li> +<li><code>extra_browser_*</code> - Custom browser configurations (if configured)</li> +<li>Plugin-provided fetchers (if installed)</li> +</ul> +</div></div></div></td></tr><tr class=""><td kind="field" title="headers" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand headers"><span class="property-name">headers</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>HTTP headers to include in requests</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP headers to include in requests</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>HTTP request body</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>HTTP request body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="proxy" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">proxy</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Proxy configuration</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Proxy configuration</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_status_codes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_status_codes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Ignore HTTP status code errors (boolean or null)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Ignore HTTP status code errors (boolean or null)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_delay" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_delay</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span></div> <div><div html="<p>Delay in seconds for webdriver</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Delay in seconds for webdriver</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="webdriver_js_execute_code" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">webdriver_js_execute_code</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>JavaScript code to execute</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>JavaScript code to execute</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_between_check" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_between_check"><span class="property-name">time_between_check</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_between_check_use_default" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">time_between_check_use_default</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Whether to use global settings for time between checks - defaults to true if not set</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to use global settings for time between checks - defaults to true if not set</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_urls" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_urls</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 1000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Notification URLs for this web page change monitor (watch). Maximum 100 URLs.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_title" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_title</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification title</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification title</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_body" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_body</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span></div> <div><div html="<p>Custom notification body</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom notification body</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_format" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_format</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"html"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"htmlcolor"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"markdown"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"System default"</span> </div> <div><div html="<p>Format for notifications</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Format for notifications</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="track_ldjson_price_data" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">track_ldjson_price_data</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Whether to track JSON-LD price data</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Whether to track JSON-LD price data</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="browser_steps" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand browser_steps"><span class="property-name">browser_steps</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Browser automation steps. Maximum 100 steps allowed.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Browser automation steps. Maximum 100 steps allowed.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="processor" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">processor</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"restock_diff"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"text_json_diff"</span> </div> <div><div html="<p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Optional processor mode to use for change detection. Defaults to <code>text_json_diff</code> if not specified.</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="include_filters" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">include_filters</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to extract specific content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to extract specific content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="subtractive_selectors" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">subtractive_selectors</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>CSS/XPath selectors to remove content from the page</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>CSS/XPath selectors to remove content from the page</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="ignore_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">ignore_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text patterns to ignore in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text patterns to ignore in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trigger_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trigger_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text/regex patterns that must be present to trigger a change</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text/regex patterns that must be present to trigger a change</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="text_should_not_be_present" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">text_should_not_be_present</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Text that should NOT be present (triggers alert if found)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Text that should NOT be present (triggers alert if found)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="extract_text" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">extract_text</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">strings</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span><span class="sc-bEjUoa sc-boKDdR sc-bBhMX lhyyLL jYezsP eA-DYPM">[ items<span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 5000 characters<!-- --> </span></span> ]</span></div> <div><div html="<p>Regex patterns to extract specific text after filtering</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Regex patterns to extract specific text after filtering</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="trim_text_whitespace" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">trim_text_whitespace</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Strip leading/trailing whitespace from text</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Strip leading/trailing whitespace from text</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="sort_text_alphabetically" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">sort_text_alphabetically</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Sort lines alphabetically before comparison</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Sort lines alphabetically before comparison</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="remove_duplicate_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">remove_duplicate_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Remove duplicate lines from content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove duplicate lines from content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="check_unique_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">check_unique_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Compare against all history for unique lines</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Compare against all history for unique lines</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="strip_ignored_lines" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">strip_ignored_lines</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Remove lines matching ignore patterns</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Remove lines matching ignore patterns</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_added" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_added</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include added text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include added text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_removed" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_removed</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include removed text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include removed text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_text_replaced" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_text_replaced</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Include replaced text in change detection</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include replaced text in change detection</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="in_stock_only" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">in_stock_only</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Only trigger on in-stock transitions (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Only trigger on in-stock transitions (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="follow_price_changes" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">follow_price_changes</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Monitor and track price changes (restock_diff processor)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Monitor and track price changes (restock_diff processor)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="price_change_threshold_percent" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">price_change_threshold_percent</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">number or null</span></div> <div><div html="<p>Minimum price change percentage to trigger notification</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Minimum price change percentage to trigger notification</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="notification_screenshot" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">notification_screenshot</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">false</span></div> <div><div html="<p>Include screenshot in notifications (if supported by notification URL)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Include screenshot in notifications (if supported by notification URL)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="filter_failure_notification_send" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">filter_failure_notification_send</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">true</span></div> <div><div html="<p>Send notification when filters fail to match content</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Send notification when filters fail to match content</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="use_page_title_in_list" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">use_page_title_in_list</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean or null</span></div> <div><div html="<p>Display page title in watch list (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Display page title in watch list (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="history_snapshot_max_length" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">history_snapshot_max_length</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">integer or null</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- -->[ 1 .. 1000 ]<!-- --> </span></span></div> <div><div html="<p>Maximum number of history snapshots to keep (null = use system default)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Maximum number of history snapshots to keep (null = use system default)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="time_schedule_limit" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand time_schedule_limit"><span class="property-name">time_schedule_limit</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">object</span></div> <div><div html="<p>Weekly schedule limiting when checks can run</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Weekly schedule limiting when checks can run</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="conditions" class="sc-kCuUfV sc-fbQrwq sc-itBLYH gdmNWp dFOJWJ kdPQHX"><span class="sc-hwddKA cteAyA"></span><button aria-label="expand conditions"><span class="property-name">conditions</span><svg class="sc-dntSTA dOPmTa" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP">Array of </span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">objects</span><span> <span class="sc-bEjUoa sc-goiVcJ lhyyLL bDfgbe"> <!-- --><= 100 items<!-- --> </span></span></div> <div><div html="<p>Array of condition rules for change detection logic (empty array when not set)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Array of condition rules for change detection logic (empty array when not set)</p> +</div></div></div></td></tr><tr class=""><td kind="field" title="conditions_match_logic" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">conditions_match_logic</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Default:<!-- --> </span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span></div><div><span class="sc-bEjUoa lhyyLL"> <!-- -->Enum<!-- -->:</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ALL"</span> <span class="sc-bEjUoa sc-dTWiOz lhyyLL kMQdIk">"ANY"</span> </div> <div><div html="<p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Logic operator - ALL (match all conditions) or ANY (match any condition)</p> +</div></div></div></td></tr><tr class="last "><td kind="field" title="overrides_watch" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">overrides_watch</span></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">boolean</span></div> <div><div html="<p>If true, this tag&#39;s settings override watch settings for all watches in this tag/group</p> +" class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>If true, this tag's settings override watch settings for all watches in this tag/group</p> </div></div></div></td></tr></tbody></table><div><h3 class="sc-gDzyrw kjrVcG">Responses</h3><div><button class="sc-jIDBmd oZuve" disabled=""><strong class="sc-eJvlPh fBhAXU">200<!-- --> </strong><div html="<p>Tag updated successfully</p> " class="sc-eVqvcJ sc-fszimp sc-etsjJW kIppRw jnwENr ljKHqG"><p>Tag updated successfully</p> </div></button></div><div><button class="sc-jIDBmd kQCDrg" disabled=""><strong class="sc-eJvlPh fBhAXU">500<!-- --> </strong><div html="<p>Server error</p> @@ -964,7 +1305,7 @@ multiple related watches.</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Production server</p> </div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>https://yourdomain.com/api/v1</span>/tag/{uuid}</div></div></div><div class="sc-iyBeIh icOxsG"><div html="<p>Custom server</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Custom server</p> -</div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>{protocol}://{host}/api/v1</span>/tag/{uuid}</div></div></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Request samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab_R_2acja_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2acja_0" tabindex="0" data-rttab="true">Payload</li><li class="react-tabs__tab" role="tab" id="tab_R_2acja_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acja_1" data-rttab="true">curl</li><li class="react-tabs__tab" role="tab" id="tab_R_2acja_2" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acja_2" data-rttab="true">Python</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2acja_0" aria-labelledby="tab_R_2acja_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-bAehkN iNRAJK">application/json</div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acja_1" aria-labelledby="tab_R_2acja_1"></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acja_2" aria-labelledby="tab_R_2acja_2"></div></div></div></div></div></div><div id="tag/Group-Tag-Management/operation/deleteTag" data-section-id="tag/Group-Tag-Management/operation/deleteTag" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/deleteTag" id="operation/deleteTag" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Group-Tag-Management/operation/deleteTag" aria-label="tag/Group-Tag-Management/operation/deleteTag"></a>Delete tag<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Delete a tag/group and remove it from all web page change monitors (watches)</p> +</div><div tabindex="0" role="button"><div class="sc-xKhEK okJpy"><span>{protocol}://{host}/api/v1</span>/tag/{uuid}</div></div></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Request samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab_R_2acja_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_2acja_0" tabindex="0" data-rttab="true">Payload</li><li class="react-tabs__tab" role="tab" id="tab_R_2acja_1" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acja_1" data-rttab="true">curl</li><li class="react-tabs__tab" role="tab" id="tab_R_2acja_2" aria-selected="false" aria-disabled="false" aria-controls="panel_R_2acja_2" data-rttab="true">Python</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_2acja_0" aria-labelledby="tab_R_2acja_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-bAehkN iNRAJK">application/json</div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"url"</span>: <span class="token string">"</span><a href="http://example.com">http://example.com</a><span class="token string">"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tag"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tags"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"paused"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_muted"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"method"</span>: <span class="token string">"GET"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"fetch_backend"</span>: <span class="token string">"system"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"headers"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"property1"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"property2"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"proxy"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_status_codes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_delay"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"webdriver_js_execute_code"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"weeks"</span>: <span class="token number">52000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"days"</span>: <span class="token number">365000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token number">8760000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token number">525600000</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"seconds"</span>: <span class="token number">31536000000</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_between_check_use_default"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_urls"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_title"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_body"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_format"</span>: <span class="token string">"text"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"track_ldjson_price_data"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"browser_steps"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"operation"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"selector"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"optional_value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"processor"</span>: <span class="token string">"restock_diff"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"include_filters"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"subtractive_selectors"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"ignore_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trigger_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"text_should_not_be_present"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"extract_text"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><span class="token string">"string"</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"trim_text_whitespace"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"sort_text_alphabetically"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"remove_duplicate_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"check_unique_lines"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"strip_ignored_lines"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_added"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_removed"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_text_replaced"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"in_stock_only"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"follow_price_changes"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"price_change_threshold_percent"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"notification_screenshot"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"filter_failure_notification_send"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"use_page_title_in_list"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"history_snapshot_max_length"</span>: <span class="token number">1</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"time_schedule_limit"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">false</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"monday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"tuesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"wednesday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"thursday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"friday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"saturday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"sunday"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"enabled"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"start_time"</span>: <span class="token string">"00:00"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"duration"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"hours"</span>: <span class="token string">"24"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"minutes"</span>: <span class="token string">"00"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"field"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"operator"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"value"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token punctuation">]</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"conditions_match_logic"</span>: <span class="token string">"ALL"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"overrides_watch"</span>: <span class="token boolean">true</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acja_1" aria-labelledby="tab_R_2acja_1"></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_2acja_2" aria-labelledby="tab_R_2acja_2"></div></div></div></div></div></div><div id="tag/Group-Tag-Management/operation/deleteTag" data-section-id="tag/Group-Tag-Management/operation/deleteTag" class="sc-dTvVRJ gHrCVQ"><div data-section-id="operation/deleteTag" id="operation/deleteTag" class="sc-jJLAfE gkiSyE"><div class="sc-ggWZvA fqkwbU"><h2 class="sc-kNOymR iFSqkw"><a class="sc-kcLKEh fRdsOi" href="#tag/Group-Tag-Management/operation/deleteTag" aria-label="tag/Group-Tag-Management/operation/deleteTag"></a>Delete tag<!-- --> </h2><div class="sc-bfjeOH txIPi"><div html="<p>Delete a tag/group and remove it from all web page change monitors (watches)</p> " class="sc-eVqvcJ sc-fszimp kIppRw kbZred"><p>Delete a tag/group and remove it from all web page change monitors (watches)</p> </div></div><div class="sc-ikkVnJ deUlC"><div class="sc-hWgKua dPSGXF"><h5 class="sc-eqYatC sc-gFqXPY czjApA jCoZLr">Authorizations:</h5><svg class="sc-dntSTA FtowP" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-jBaHRL fUkQtw"><span class="sc-iVnIWt gRXavu"><span class="sc-hqtLyI hRtRoN"><i>ApiKeyAuth</i></span></span></div></div><div><h5 class="sc-eqYatC czjApA">path<!-- --> Parameters</h5><table class="sc-eqNDNG icJLQx"><tbody><tr class="last "><td kind="field" title="uuid" class="sc-kCuUfV sc-fbQrwq gdmNWp dFOJWJ"><span class="sc-hwddKA cteAyA"></span><span class="property-name">uuid</span><div class="sc-bEjUoa sc-iIvHqT lhyyLL crXmiY">required</div></td><td class="sc-gGKoUb ixGaBD"><div><div><span class="sc-bEjUoa sc-boKDdR lhyyLL jYezsP"></span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq">string</span><span class="sc-bEjUoa sc-fOOuSg lhyyLL dbKJYq"> <!-- --><<!-- -->uuid<!-- -->><!-- --> </span></div> <div><div html="<p>Tag unique ID</p> " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr"><p>Tag unique ID</p> @@ -1139,7 +1480,7 @@ counts, uptime information, and version details.</p> <span class="token operator">-</span>H <span class="token string">"x-api-key: YOUR_API_KEY"</span> </pre></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel_R_ijla_1" aria-labelledby="tab_R_ijla_1"></div></div></div><div><h3 class="sc-lgpSej drJHMo"> <!-- -->Response samples<!-- --> </h3><div class="sc-cOpnSz fyxuKi" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab_R_jjla_0" aria-selected="true" aria-disabled="false" aria-controls="panel_R_jjla_0" tabindex="0" data-rttab="true">200</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel_R_jjla_0" aria-labelledby="tab_R_jjla_0"><div><div class="sc-bSFBcf iLdyBp"><span class="sc-gahYZc cXitJ">Content type</span><div class="sc-bAehkN iNRAJK">application/json</div></div><div class="sc-blIAwI eKKwxo"><div class="sc-dClGHI fdRrNy"><div class="sc-bbbBoY bBWkcI"><button><div class="sc-fYmhhH iNCOCX">Copy</div></button></div><div tabindex="0" class="sc-eVqvcJ kIppRw sc-fhfEft dFvLDb"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"watch_count"</span>: <span class="token number">42</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"tag_count"</span>: <span class="token number">5</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"uptime"</span>: <span class="token string">"2 days, 3:45:12"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"version"</span>: <span class="token string">"0.50.10"</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div></div></div></div></div></div></div><div class="sc-evkzZa iZqpqg"></div></div></div> <script> - const __redoc_state = {"menu":{"activeItemIdx":-1},"spec":{"data":{"openapi":"3.1.0","info":{"title":"ChangeDetection.io API","description":"# ChangeDetection.io Web page monitoring and notifications API\n\nREST API for managing Page watches, Group tags, and Notifications.\n\nchangedetection.io can be driven by its built in simple API, in the examples below you will also find `curl` command line and `python` examples to help you get started faster.\n\n## Where to find my API key?\n\nThe API key can be easily found under the **SETTINGS** then **API** tab of changedetection.io dashboard. \nSimply click the API key to automatically copy it to your clipboard.\n\n![Where to find the API key](./where-to-get-api-key.jpeg)\n\n## Connection URL\n\nThe 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`.\n\nIf you are using the hosted/subscription version of changedetection.io, then the URL is based on your login URL, for example: \n`https://<your login url>/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/history`\n\n## Authentication\n\nAlmost all API requests require some authentication, this is provided as an **API Key** in the header of the HTTP request.\n\nFor example: `x-api-key: YOUR_API_KEY`\n","version":"0.1.5","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. \nEach watch represents a single URL being monitored for changes, with configurable settings for check intervals, \nnotification preferences, and content filtering options.\n"},{"name":"Watch History","description":"Get a list of timestamps of all changes detected for a watch.\n"},{"name":"Snapshots","description":"Retrieve individual text snapshot of monitored content according to the `timestamp`. The text snapshot is the HTML\nto Text at page check time. \n\nSet the query argument `html` to any value to retrieve the last HTML fetched, the system only keeps the last two \n(2) HTML files fetched.\n\nUse the Watch History API endpoint to get a list of timestamps to pass to this query.\n"},{"name":"Favicon","description":"Retrieve favicon images associated with monitored web pages. These are used in the dashboard interface \nto visually identify different watches in your monitoring list.\n"},{"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 \nnotification preferences, and perform bulk operations like mass rechecking or status changes across \nmultiple related watches.\n"},{"name":"Notifications","description":"Configure global notification endpoints that can be used across all your watches. Supports various \nnotification services including email, Discord, Slack, webhooks, and many other popular platforms. \nThese settings serve as defaults that can be overridden at the individual watch or tag level.\n\nThe notification syntax uses [https://github.com/caronc/apprise](https://github.com/caronc/apprise).\n"},{"name":"Search","description":"Search and filter your watches by URL patterns, titles, or tags. Useful for quickly finding specific \nmonitors in large collections or identifying watches that match certain criteria.\n"},{"name":"Import","description":"Bulk import multiple URLs for monitoring. Accepts plain text lists of URLs and can automatically \napply tags, proxy settings, and other configurations to all imported watches simultaneously.\n"},{"name":"System Information","description":"Retrieve system status and statistics about your changedetection.io instance, including total watch \ncounts, uptime information, and version details.\n"}],"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.\n\nEnter your API key in the \"Authorize\" button above to automatically populate all code examples.\n"}},"schemas":{"WatchBase":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to monitor for changes","maxLength":5000},"title":{"type":"string","description":"Custom title for the web page change monitor (watch), not to be confused with page_title","maxLength":5000},"tag":{"type":"string","description":"Tag UUID to associate with this web page change monitor (watch)","maxLength":5000},"tags":{"type":"array","items":{"type":"string"},"description":"Array of tag UUIDs"},"paused":{"type":"boolean","description":"Whether the web page change monitor (watch) is paused"},"notification_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","minimum":0,"maximum":52000,"nullable":true},"days":{"type":"integer","minimum":0,"maximum":365000,"nullable":true},"hours":{"type":"integer","minimum":0,"maximum":8760000,"nullable":true},"minutes":{"type":"integer","minimum":0,"maximum":525600000,"nullable":true},"seconds":{"type":"integer","minimum":0,"maximum":31536000000,"nullable":true}},"description":"Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings."},"time_between_check_use_default":{"type":"boolean","default":true,"description":"Whether to use global settings for time between checks - defaults to true if not set"},"notification_urls":{"type":"array","items":{"type":"string","maxLength":1000},"maxItems":100,"description":"Notification URLs for this web page change monitor (watch). Maximum 100 URLs."},"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","htmlcolor","markdown","System default"],"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,"nullable":true},"selector":{"type":"string","maxLength":5000,"nullable":true},"optional_value":{"type":"string","maxLength":5000,"nullable":true}},"required":["operation","selector","optional_value"],"additionalProperties":false},"maxItems":100,"description":"Browser automation steps. Maximum 100 steps allowed."},"processor":{"type":"string","enum":["restock_diff","text_json_diff"],"default":"text_json_diff","description":"Optional processor mode to use for change detection. Defaults to `text_json_diff` if not specified."}}},"Watch":{"allOf":[{"$ref":"#/components/schemas/WatchBase"},{"type":"object","properties":{"uuid":{"type":"string","format":"uuid","description":"Unique identifier for the web page change monitor (watch)","readOnly":true},"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},"last_viewed":{"type":"integer","description":"Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than `last_changed` in the \"Update watch\" endpoint marks the watch as viewed.","minimum":0},"link":{"type":"string","format":"string","description":"The watch URL rendered in case of any Jinja2 markup, always use this for listing.","readOnly":true}}}]},"CreateWatch":{"allOf":[{"$ref":"#/components/schemas/WatchBase"},{"type":"object","required":["url"]}]},"UpdateWatch":{"allOf":[{"$ref":"#/components/schemas/WatchBase"},{"type":"object","properties":{"last_viewed":{"type":"integer","description":"Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than `last_changed` in the \"Update watch\" endpoint marks the watch as viewed.","minimum":0}}}]},"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 web page change monitors (watches) with this tag"},"notification_muted":{"type":"boolean","description":"Whether notifications are muted for this tag"}}},"CreateTag":{"allOf":[{"$ref":"#/components/schemas/Tag"},{"type":"object","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 web page change monitors (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 web page change monitors (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":{"operationId":"listWatches","tags":["Watch Management"],"summary":"List all watches","description":"Return concise list of available web page change monitors (watches) and basic info","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/watch\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/watch', headers=headers)\nprint(response.json())\n"}],"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?id={{1+1}} - the raw URL","link":"http://example.com?id=2 - the rendered URL, always use this for listing.","title":"Example Website Monitor - manually entered title/description","page_title":"The HTML <title> from the page","tags":["550e8400-e29b-41d4-a716-446655440000"],"paused":false,"notification_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":"http://example.com?id={{1+1}} - the raw URL","link":"http://example.com?id=2 - the rendered URL, always use this for listing.","title":"News Site Tracker - manually entered title/description","page_title":"The HTML <title> from the page","tags":["330e8400-e29b-41d4-a716-446655440001"],"paused":false,"notification_muted":true,"method":"GET","fetch_backend":"html_webdriver","last_checked":1640998800,"last_changed":1640995200}}}}}}},"post":{"operationId":"createWatch","tags":["Watch Management"],"summary":"Create a new watch","description":"Create a single web page change monitor (watch). Requires at least `url` to be set.\n\nEvery watch can be configured with:\n- **Processor mode**: `processor` field (`restock_diff` or `text_json_diff` - default)\n- **Notification settings**: `notification_urls` (array), `notification_title`, `notification_body`, `notification_format`, `notification_muted`\n- **Tags/Groups**: `tag` (UUID string) or `tags` (array of UUIDs)\n- **Check settings**: `time_between_check`, `paused`, `method`, `fetch_backend`\n- **Advanced options**: `headers`, `body`, `proxy`, `browser_steps`, and more\n","x-code-samples":[{"lang":"curl","source":"curl -X POST \"http://localhost:5000/api/v1/watch\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"url\": \"https://example.com\",\n \"title\": \"Example Site Monitor\",\n \"time_between_check\": {\n \"hours\": 1\n }\n }'\n"},{"lang":"Python","source":"import requests\nimport json\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'url': 'https://example.com',\n 'title': 'Example Site Monitor',\n 'time_between_check': {\n 'hours': 1\n }\n}\nresponse = requests.post('http://localhost:5000/api/v1/watch',\n headers=headers, json=data)\nprint(response.text)\n"}],"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":"Web page change monitor (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":"getWatch","tags":["Watch Management"],"summary":"Get single watch","description":"Retrieve web page change monitor (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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}', headers=headers)\nprint(response.json())\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}},{"name":"recheck","in":"query","description":"Recheck this web page change monitor (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":"Web page change monitor (watch) not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"updateWatch","tags":["Watch Management"],"summary":"Update watch","description":"Update an existing web page change monitor (watch) using JSON. Accepts the same structure as returned in [get single watch information](#operation/getWatch).","x-code-samples":[{"lang":"curl","source":"curl -X PUT \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"url\": \"https://updated-example.com\",\n \"title\": \"Updated Monitor\",\n \"paused\": false\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\ndata = {\n 'url': 'https://updated-example.com',\n 'title': 'Updated Monitor',\n 'paused': False\n}\nresponse = requests.put(f'http://localhost:5000/api/v1/watch/{uuid}', \n headers=headers, json=data)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWatch"}}}},"responses":{"200":{"description":"Web page change monitor (watch) updated successfully","content":{"text/plain":{"schema":{"type":"string","example":"OK"}}}},"500":{"description":"Server error"}}},"delete":{"operationId":"deleteWatch","tags":["Watch Management"],"summary":"Delete watch","description":"Delete a web page change monitor (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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.delete(f'http://localhost:5000/api/v1/watch/{uuid}', headers=headers)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Web page change monitor (watch) deleted successfully","content":{"text/plain":{"schema":{"type":"string","example":"OK"}}}}}}},"/watch/{uuid}/history":{"get":{"operationId":"getWatchHistory","tags":["Watch History"],"summary":"Get watch history","description":"Get a list of all historical snapshots available for a web page change monitor (watch), use the key `timestamp`\nas the query argument for fetching a single watch history snapshot.\n","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/history\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/history', headers=headers)\nprint(response.json())\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (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":"Web page change monitor (watch) not found"}}}},"/watch/{uuid}/history/{timestamp}":{"get":{"operationId":"getWatchSnapshot","tags":["Snapshots"],"summary":"Get single snapshot","description":"Get single snapshot from web page change monitor (watch). Use 'latest' for the most recent snapshot.\nUse the Watch History API to get a list of timestamps to pass.\n","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/history/latest\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\ntimestamp = 'latest' # or use specific timestamp like 1640995200\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/history/{timestamp}', headers=headers)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (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}/difference/{from_timestamp}/{to_timestamp}":{"get":{"operationId":"getWatchHistoryDiff","tags":["Watch History"],"summary":"Get the difference between two snapshots","description":"Generate a difference (comparison) between two historical snapshots of a web page change monitor (watch).\n\nThis endpoint compares content between two points in time and returns the differences in your chosen format.\nPerfect for reviewing what changed between specific versions or comparing recent changes.\n\n**Timestamp Keywords:**\n- Use `'latest'` for the most recent snapshot (to_timestamp)\n- Use `'previous'` for the second-most-recent snapshot (from_timestamp)\n- Or use specific Unix timestamps from the watch history\n\n**Format Options:**\n- `text` (default): Plain text with (removed) and (added) prefixes\n- `html`: HTML format with (removed) and (added) text\n- `htmlcolor`: Rich HTML with colored highlights (green for additions, red for deletions)\n\n**Word-Level Diffing:**\n- Enable word-level granularity with `word_diff=true` for detailed inline comparisons\n- Disable with `word_diff=false` for line-level comparisons only (default false/off, line-level mode by default)\n\n**Raw Diff Output:**\n- Use `no_markup=true` to get raw diff content without any formatting applied\n- Returns content with placeholders for opening/closing tags of changes\n- Allows you to implement your own custom colorisation or formatting\n- Skips all HTML color application and service tweaks (added text, html color tags, etc)\n","x-code-samples":[{"lang":"curl","source":"# Compare previous snapshot to latest with colored HTML\ncurl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/difference/previous/latest?format=htmlcolor\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n\n# Compare two specific timestamps in plain text with word-level diff\ncurl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/difference/1640995200/1640998800?format=text&word_diff=true\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n\n# Show only additions (hide removed/replaced content), ignore whitespace\ncurl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/difference/previous/latest?format=htmlcolor&removed=false&replaced=false&ignoreWhitespace=true\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\n\n# Compare previous to latest with colored HTML output\nresponse = requests.get(\n f'http://localhost:5000/api/v1/watch/{uuid}/difference/previous/latest',\n headers=headers,\n params={'format': 'htmlcolor'}\n)\nprint(response.text)\n\n# Compare specific timestamps with word-level diff\nfrom_ts = '1640995200'\nto_ts = '1640998800'\nresponse = requests.get(\n f'http://localhost:5000/api/v1/watch/{uuid}/difference/{from_ts}/{to_ts}',\n headers=headers,\n params={'format': 'text', 'word_diff': 'true'}\n)\nprint(response.text)\n\n# Show only additions, ignore whitespace and use word-level diff\nresponse = requests.get(\n f'http://localhost:5000/api/v1/watch/{uuid}/difference/previous/latest',\n headers=headers,\n params={\n 'format': 'htmlcolor',\n 'type': 'diffWords',\n 'removed': 'false',\n 'replaced': 'false',\n 'ignoreWhitespace': 'true'\n }\n)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}},{"name":"from_timestamp","in":"path","required":true,"description":"Starting snapshot timestamp, 'previous' for second-most-recent, or specific Unix timestamp","schema":{"oneOf":[{"type":"integer","description":"Unix timestamp of the starting snapshot"},{"type":"string","enum":["previous"],"description":"Use 'previous' to automatically select the second-most-recent snapshot"}]},"example":"previous"},{"name":"to_timestamp","in":"path","required":true,"description":"Ending snapshot timestamp, 'latest' for most recent, or specific Unix timestamp","schema":{"oneOf":[{"type":"integer","description":"Unix timestamp of the ending snapshot"},{"type":"string","enum":["latest"],"description":"Use 'latest' to automatically select the most recent snapshot"}]},"example":"latest"},{"name":"format","in":"query","description":"Output format for the diff:\n- `text` (default): Plain text with (removed) and (added) prefixes\n- `html`: Basic HTML format\n- `htmlcolor`: Rich HTML with colored backgrounds (red for deletions, green for additions)\n- `markdown`: Markdown format with HTML rendering\n","schema":{"type":"string","enum":["text","html","htmlcolor","markdown"],"default":"text"}},{"name":"word_diff","in":"query","description":"Enable word-level diffing for more granular comparisons.\nWhen enabled, changes are highlighted at the word level rather than line level.\nDefault is false (line-level mode).\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"false"}},{"name":"no_markup","in":"query","description":"When set to true, returns the raw diff content without any markup formatting.\nThe content will include placeholders for opening/closing tags of the changes,\nallowing you to implement your own custom colorisation or formatting.\nThis skips all HTML color application and service tweaks.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"false"}},{"name":"type","in":"query","description":"Diff granularity type:\n- `diffLines` (default): Line-level comparison, showing which lines changed\n- `diffWords`: Word-level comparison, showing which words changed within lines\n\nThis parameter is an alternative to `word_diff` for better alignment with the UI.\nIf both are specified, `type=diffWords` will enable word-level diffing.\n","schema":{"type":"string","enum":["diffLines","diffWords"],"default":"diffLines"}},{"name":"changesOnly","in":"query","description":"When enabled, only show lines/content that changed (no surrounding context).\nWhen disabled, include unchanged lines for context around changes.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}},{"name":"ignoreWhitespace","in":"query","description":"When enabled, ignore whitespace-only changes (spaces, tabs, newlines).\nUseful for focusing on content changes and ignoring formatting differences.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"false"}},{"name":"removed","in":"query","description":"Include removed/deleted content in the diff output.\nWhen disabled, content that was deleted will not appear in the diff.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}},{"name":"added","in":"query","description":"Include added/new content in the diff output.\nWhen disabled, content that was added will not appear in the diff.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}},{"name":"replaced","in":"query","description":"Include replaced/modified content in the diff output.\nWhen disabled, content that was modified (changed from one value to another) will not appear in the diff.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}}],"responses":{"200":{"description":"Formatted diff between the two snapshots","content":{"text/plain":{"schema":{"type":"string","description":"Plain text diff with change markers"}},"text/html":{"schema":{"type":"string","description":"HTML formatted diff with styling"}}}},"400":{"description":"Invalid format parameter or invalid request"},"404":{"description":"Watch not found, timestamps not found, or insufficient history"}}}},"/watch/{uuid}/favicon":{"get":{"operationId":"getWatchFavicon","tags":["Favicon"],"summary":"Get watch favicon","description":"Get the favicon for a web page change monitor (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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n --output favicon.ico\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/favicon', headers=headers)\nwith open('favicon.ico', 'wb') as f:\n f.write(response.content)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (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":{"operationId":"listTags","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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/tags', headers=headers)\nprint(response.json())\n"}],"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":{"post":{"operationId":"createTag","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"title\": \"Important Sites\"\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {'title': 'Important Sites'}\nresponse = requests.post('http://localhost:5000/api/v1/tag',\n headers=headers, json=data)\nprint(response.json())\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTag"},"example":{"title":"Important Sites"}}}},"responses":{"201":{"description":"Tag created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string","format":"uuid","description":"UUID of the created tag"}}}}}},"400":{"description":"Invalid or unsupported tag"}}}},"/tag/{uuid}":{"get":{"operationId":"getTag","tags":["Group / Tag Management"],"summary":"Get single tag","description":"Retrieve tag information, set notification_muted status, recheck all web page change monitors (watches) in tag.","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\ntag_uuid = '550e8400-e29b-41d4-a716-446655440000'\nresponse = requests.get(f'http://localhost:5000/api/v1/tag/{tag_uuid}', headers=headers)\nprint(response.json())\n"}],"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 web page change monitors (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":{"operationId":"updateTag","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"title\": \"Updated Production Sites\",\n \"notification_muted\": false\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ntag_uuid = '550e8400-e29b-41d4-a716-446655440000'\ndata = {\n 'title': 'Updated Production Sites',\n 'notification_muted': False\n}\nresponse = requests.put(f'http://localhost:5000/api/v1/tag/{tag_uuid}', \n headers=headers, json=data)\nprint(response.text)\n"}],"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":{"operationId":"deleteTag","tags":["Group / Tag Management"],"summary":"Delete tag","description":"Delete a tag/group and remove it from all web page change monitors (watches)","x-code-samples":[{"lang":"curl","source":"curl -X DELETE \"http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\ntag_uuid = '550e8400-e29b-41d4-a716-446655440000'\nresponse = requests.delete(f'http://localhost:5000/api/v1/tag/{tag_uuid}', headers=headers)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Tag unique ID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Tag deleted successfully"}}}},"/notifications":{"get":{"operationId":"getNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/notifications', headers=headers)\nprint(response.json())\n"}],"responses":{"200":{"description":"List of notification URLs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationUrls"}}}}}},"post":{"operationId":"addNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"notification_urls\": [\n \"mailto:admin@example.com\",\n \"discord://webhook_id/webhook_token\"\n ]\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'notification_urls': [\n 'mailto:admin@example.com',\n 'discord://webhook_id/webhook_token'\n ]\n}\nresponse = requests.post('http://localhost:5000/api/v1/notifications', \n headers=headers, json=data)\nprint(response.json())\n"}],"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":{"operationId":"replaceNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"notification_urls\": [\n \"mailto:newadmin@example.com\"\n ]\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'notification_urls': [\n 'mailto:newadmin@example.com'\n ]\n}\nresponse = requests.put('http://localhost:5000/api/v1/notifications', \n headers=headers, json=data)\nprint(response.json())\n"}],"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":{"operationId":"deleteNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"notification_urls\": [\n \"mailto:admin@example.com\"\n ]\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'notification_urls': [\n 'mailto:admin@example.com'\n ]\n}\nresponse = requests.delete('http://localhost:5000/api/v1/notifications', \n headers=headers, json=data)\nprint(response.status_code)\n"}],"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":{"operationId":"searchWatches","tags":["Search"],"summary":"Search watches","description":"Search web page change monitors (watches) by URL or title text","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/search?q=example.com\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nparams = {'q': 'example.com'}\nresponse = requests.get('http://localhost:5000/api/v1/search', \n headers=headers, params=params)\nprint(response.json())\n"}],"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","tags":["550e8400-e29b-41d4-a716-446655440000"],"paused":false,"notification_muted":false}}}}}}}}},"/import":{"post":{"operationId":"importWatches","tags":["Import"],"summary":"Import watch URLs with configuration","description":"Import a list of URLs to monitor with optional watch configuration. Accepts line-separated URLs in request body.\n\n**Configuration via Query Parameters:**\n\nYou can pass ANY watch configuration field as query parameters to apply settings to all imported watches.\nAll parameters from the Watch schema are supported (processor, fetch_backend, notification_urls, etc.).\n\n**Special Parameters:**\n- `tag` / `tag_uuids` - Assign tags to imported watches\n- `proxy` - Use specific proxy for imported watches\n- `dedupe` - Skip duplicate URLs (default: true)\n\n**Type Conversion:**\n- Booleans: `true`, `false`, `1`, `0`, `yes`, `no`\n- Arrays: Comma-separated or JSON format (`[item1,item2]`)\n- Objects: JSON format (`{\"key\":\"value\"}`)\n- Numbers: Parsed as int or float\n","x-code-samples":[{"lang":"curl","source":"# Basic import\ncurl -X POST \"http://localhost:5000/api/v1/import\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: text/plain\" \\\n -d $'https://example.com\\nhttps://example.org\\nhttps://example.net'\n\n# Import with processor and fetch backend\ncurl -X POST \"http://localhost:5000/api/v1/import?processor=restock_diff&fetch_backend=html_webdriver\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: text/plain\" \\\n -d $'https://example.com\\nhttps://example.org'\n\n# Import with multiple settings\ncurl -X POST \"http://localhost:5000/api/v1/import?processor=restock_diff&paused=true&tag=production\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: text/plain\" \\\n -d $'https://example.com'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'text/plain'\n}\n\n# Basic import\nurls = 'https://example.com\\nhttps://example.org\\nhttps://example.net'\nresponse = requests.post('http://localhost:5000/api/v1/import',\n headers=headers, data=urls)\nprint(response.json())\n\n# Import with configuration\nparams = {\n 'processor': 'restock_diff',\n 'fetch_backend': 'html_webdriver',\n 'paused': 'false',\n 'tag': 'production'\n}\nresponse = requests.post('http://localhost:5000/api/v1/import',\n headers=headers, params=params, data=urls)\nprint(response.json())\n"}],"parameters":[{"name":"tag_uuids","in":"query","description":"Tag UUID(s) to apply to imported watches (comma-separated for multiple)","schema":{"type":"string"},"example":"550e8400-e29b-41d4-a716-446655440000"},{"name":"tag","in":"query","description":"Tag name to apply to imported watches","schema":{"type":"string"},"example":"production"},{"name":"proxy","in":"query","description":"Proxy key to use for imported watches","schema":{"type":"string"},"example":"proxy1"},{"name":"dedupe","in":"query","description":"Skip duplicate URLs (default true)","schema":{"type":"boolean","default":true}}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"string"},"example":"https://example.com\nhttps://example.org\nhttps://example.net\n"}}},"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":{"operationId":"getSystemInfo","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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/systeminfo', headers=headers)\nprint(response.json())\n"}],"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"}}}}}}}}}},"searchIndex":{"store":["section/ChangeDetection.io-Web-page-monitoring-and-notifications-API","section/ChangeDetection.io-Web-page-monitoring-and-notifications-API/Where-to-find-my-API-key","section/ChangeDetection.io-Web-page-monitoring-and-notifications-API/Connection-URL","section/ChangeDetection.io-Web-page-monitoring-and-notifications-API/Authentication","tag/Watch-Management","tag/Watch-Management/operation/listWatches","tag/Watch-Management/operation/createWatch","tag/Watch-Management/operation/getWatch","tag/Watch-Management/operation/updateWatch","tag/Watch-Management/operation/deleteWatch","tag/Watch-History","tag/Watch-History/operation/getWatchHistory","tag/Watch-History/operation/getWatchHistoryDiff","tag/Snapshots","tag/Snapshots/operation/getWatchSnapshot","tag/Favicon","tag/Favicon/operation/getWatchFavicon","tag/Group-Tag-Management","tag/Group-Tag-Management/operation/listTags","tag/Group-Tag-Management/operation/createTag","tag/Group-Tag-Management/operation/getTag","tag/Group-Tag-Management/operation/updateTag","tag/Group-Tag-Management/operation/deleteTag","tag/Notifications","tag/Notifications/operation/getNotifications","tag/Notifications/operation/addNotifications","tag/Notifications/operation/replaceNotifications","tag/Notifications/operation/deleteNotifications","tag/Search","tag/Search/operation/searchWatches","tag/Import","tag/Import/operation/importWatches","tag/System-Information","tag/System-Information/operation/getSystemInfo"],"index":{"version":"2.3.9","fields":["title","description"],"fieldVectors":[["title/0",[0,1.105,1,0.486,2,0.414,3,0.319,4,0.486,5,0.845]],["description/0",[0,1.778,2,0.666,4,0.783,5,1.893,6,3.026,7,1.971,8,0.014,9,2.212,10,0.613,11,3.026,12,3.026,13,3.026,14,3.08,15,3.026,16,1.971,17,3.026,18,3.026,19,3.026,20,3.026,21,3.026,22,3.026,23,3.026]],["title/1",[5,1.249,16,1.811,24,1.811]],["description/1",[0,1.916,5,2.43,16,2.124,24,2.888,25,3.261,26,2.732,27,3.261,28,1.247,29,3.261,30,2.732,31,3.261,32,3.261,33,2.732,34,3.261,35,3.261,36,3.261]],["title/2",[37,3.308,38,0.728]],["description/2",[0,2.507,5,1.385,14,3.119,26,2.582,38,1.077,39,3.082,40,3.082,41,3.082,42,3.082,43,3.082,44,3.082,45,1.007,46,3.082,47,2.253,48,3.082,49,4.266,50,3.082,51,3.082]],["title/3",[52,3.42]],["description/3",[5,2.196,14,2.759,24,2.458,52,3.162,53,4.094,54,3.162,55,3.162,56,3.162,57,3.774,58,3.774,59,3.774]],["title/4",[7,2.154,8,0.015]],["description/4",[1,0.718,2,0.611,3,0.673,4,0.718,7,1.808,8,0.018,28,1.061,38,0.611,60,2.776,61,2.776,62,1.631,63,1.484,64,1.631,65,1.247,66,2.03,67,2.776,68,2.776,69,1.149,70,2.776,71,0.718,72,1.149,73,2.03,74,2.776,75,2.326,76,2.03,77,2.326,78,1.808]],["title/5",[8,0.015,79,0.925]],["description/5",[1,0.998,2,0.85,3,0.656,8,0.023,71,0.998,79,1.08,80,1.888,81,3.861,82,2.822,83,3.861,84,3.861]],["title/6",[8,0.013,62,1.634,85,2.781]],["description/6",[1,0.508,2,0.432,3,0.334,4,0.508,8,0.017,10,0.62,28,1.438,38,0.432,54,1.646,56,1.646,62,1.154,69,0.813,71,0.508,72,0.813,73,1.436,78,1.28,86,3.175,87,2.565,88,1.646,89,1.646,90,1.965,91,1.965,92,1.28,93,1.646,94,2.565,95,1.965,96,1.965,97,1.965,98,1.646,99,1.646,100,3.062,101,1.965,102,1.965,103,1.965,104,1.965,105,1.646,106,1.965,107,1.646,108,1.436,109,1.965,110,1.436]],["title/7",[8,0.015,69,1.37]],["description/7",[1,0.934,2,0.795,3,0.613,8,0.022,28,1.381,63,1.93,71,0.934,80,1.766,111,1.93,112,3.612,113,2.352,114,3.612,115,2.352,116,2.64]],["title/8",[8,0.015,64,1.944]],["description/8",[1,0.895,2,0.762,3,0.588,8,0.021,45,1.132,64,2.035,69,1.434,71,0.895,80,1.694,115,2.255,116,2.531,117,2.901,118,2.531,119,3.463,120,3.463,121,3.463]],["title/9",[8,0.015,65,1.486]],["description/9",[1,1.072,2,0.912,3,0.704,8,0.019,65,1.863,71,1.072,116,3.031,122,3.474,123,2.028]],["title/10",[8,0.015,123,1.618]],["description/10",[8,0.021,71,1.19,79,1.287,124,2.703,125,4.601]],["title/11",[8,0.015,123,1.618]],["description/11",[1,0.843,2,0.718,3,0.554,8,0.02,24,2.124,45,1.066,69,1.35,71,0.843,79,0.912,82,2.384,123,1.595,124,1.916,126,2.732,127,2.169,128,2.384,129,2.732,130,2.732,131,3.261]],["title/12",[127,1.173,132,1.753,133,2.009,134,1.753]],["description/12",[1,0.255,2,0.217,3,0.167,8,0.008,10,0.349,45,0.903,47,0.72,65,0.443,71,0.714,76,1.683,78,0.642,80,0.844,86,3.003,88,0.826,92,1.499,123,0.482,124,1.014,126,0.826,127,1.126,132,1.261,133,1.928,134,1.261,135,0.985,136,2.302,137,0.72,138,1.725,139,0.985,140,0.826,141,0.985,142,2.631,143,0.985,144,0.985,145,1.261,146,1.446,147,0.985,148,0.826,149,0.985,150,0.985,151,0.985,152,0.985,153,0.985,154,1.799,155,0.826,156,1.446,157,2.302,158,0.985,159,2.631,160,0.985,161,0.985,162,2.302,163,0.985,164,0.985,165,0.985,166,0.985,167,1.725,168,0.985,169,0.985,170,0.985,171,0.985,172,0.826,173,0.985,174,0.985,175,0.985,176,1.725,177,0.985,178,1.725,179,1.725,180,0.985,181,0.985,182,0.985,183,0.72,184,0.985,185,0.985,186,0.826,187,0.985,188,0.985,189,0.985,190,0.826,191,0.985,192,0.826,193,0.985,194,0.826,195,0.985]],["title/13",[127,1.997]],["description/13",[2,0.51,3,0.393,5,1.041,8,0.011,28,0.886,45,0.757,63,1.856,66,1.694,73,1.694,76,1.694,79,0.648,123,1.133,124,2.04,127,1.698,128,2.539,129,1.941,130,2.91,134,1.694,137,1.694,140,1.941,154,2.713,159,3.877,196,2.317,197,2.317,198,3.473,199,1.361,200,2.317,201,2.317,202,2.317,203,1.694]],["title/14",[69,1.37,127,1.618]],["description/14",[1,0.86,2,0.732,3,0.565,5,1.494,8,0.021,45,1.469,69,1.377,71,0.86,79,0.93,123,1.627,124,1.954,127,2.198,146,2.787,148,2.787,203,2.431,204,3.326]],["title/15",[205,2.659]],["description/15",[1,0.914,2,0.778,3,0.795,8,0.016,30,2.962,45,1.156,63,1.89,79,0.989,132,2.585,205,2.303,206,3.536,207,3.536,208,3.536,209,3.536,210,2.962]],["title/16",[8,0.015,205,2.154]],["description/16",[1,1.022,2,0.87,3,0.671,8,0.023,71,1.022,79,1.105,205,2.573,211,3.952,212,3.952,213,3.952]],["title/17",[7,1.562,9,1.753,10,0.485,86,1.562]],["description/17",[3,0.505,4,0.769,8,0.019,9,3.042,10,0.842,28,1.136,45,0.972,71,0.769,75,2.491,113,1.936,122,2.491,186,2.491,214,2.973,215,2.973,216,2.973,217,2.973,218,2.973,219,2.491,220,2.973,221,2.973,222,2.491,223,2.491]],["title/18",[10,0.67,79,0.925]],["description/18",[10,0.931,79,1.287,80,2.25,82,3.363,99,3.855]],["title/19",[10,0.67,62,1.944]],["description/19",[10,0.957,62,2.779,69,1.958,224,3.963]],["title/20",[10,0.67,69,1.37]],["description/20",[1,0.954,2,0.812,3,0.627,8,0.017,10,0.975,28,1.411,63,1.973,71,0.954,98,3.093,111,1.973,113,2.404,222,3.093,225,2.698]],["title/21",[10,0.67,64,1.944]],["description/21",[10,0.906,45,1.464,64,2.631,115,2.916,117,3.752,225,3.274]],["title/22",[10,0.67,65,1.486]],["description/22",[1,1.072,2,0.912,3,0.704,8,0.019,65,1.863,71,1.072,156,3.474,224,3.474,225,3.031]],["title/23",[4,1.056]],["description/23",[4,1.185,8,0.018,10,0.553,28,1.044,45,1.281,66,1.997,72,1.131,92,1.779,137,1.997,192,2.288,226,2.731,227,2.288,228,2.731,229,2.288,230,2.731,231,2.731,232,2.731,233,2.731,234,2.731,235,2.731,236,2.731,237,2.731,238,2.731,239,2.731,240,2.731,241,2.731]],["title/24",[4,0.855,38,0.728]],["description/24",[4,1.407,38,0.985,72,1.854,79,1.253,80,2.19]],["title/25",[4,0.719,38,0.612,242,2.33]],["description/25",[4,1.384,38,0.96,72,1.806,110,3.189,242,3.655,243,3.655]],["title/26",[4,0.719,38,0.612,244,2.33]],["description/26",[4,1.384,38,0.96,55,3.655,79,1.22,244,3.655,245,4.362]],["title/27",[4,0.719,38,0.612,65,1.249]],["description/27",[4,1.384,38,0.96,65,1.96,72,1.806,110,3.189,243,3.655]],["title/28",[246,2.659]],["description/28",[3,0.565,8,0.021,10,0.673,16,2.166,38,0.732,45,1.087,77,2.787,145,2.431,210,2.787,246,2.166,247,3.326,248,2.787,249,3.326,250,3.326,251,3.326,252,3.326,253,3.326,254,3.326]],["title/29",[8,0.015,246,2.154]],["description/29",[1,1.046,2,0.891,3,0.687,8,0.018,38,0.891,71,1.046,154,2.635,246,3.328,248,3.391]],["title/30",[255,2.659]],["description/30",[3,0.565,8,0.015,10,0.673,28,1.271,33,2.787,38,0.989,72,1.377,79,0.93,108,2.431,118,2.431,154,2.166,155,2.787,183,2.431,219,2.787,223,2.787,255,2.927,256,3.326]],["title/31",[8,0.011,38,0.528,72,0.993,255,1.562]],["description/31",[3,0.241,8,0.019,10,0.476,28,0.542,38,0.664,45,0.463,53,1.188,72,1.25,78,0.923,79,0.397,86,3.334,87,1.188,89,1.188,92,0.923,93,1.188,94,1.188,105,1.188,107,1.188,108,1.721,115,1.533,118,1.036,128,1.721,142,1.972,145,1.036,183,1.036,190,1.188,194,1.188,203,1.036,227,1.188,255,2.539,257,1.418,258,1.418,259,3.514,260,1.418,261,1.418,262,1.418,263,1.418,264,1.418,265,1.418,266,2.354,267,1.418,268,1.418,269,1.418,270,1.418,271,1.418,272,1.418,273,1.418,274,1.418,275,1.418,276,1.418,277,1.418,278,1.418,279,1.418,280,1.418,281,1.418]],["title/32",[111,1.768,199,1.944]],["description/32",[0,2.169,8,0.017,47,2.698,63,1.973,111,1.973,113,2.404,172,3.093,199,2.169,229,3.093,282,3.691,283,3.691,284,3.691,285,3.691,286,3.691]],["title/33",[111,1.768,199,1.944]],["description/33",[80,2.19,111,2.394,199,2.631,287,4.478,288,4.478,289,4.478]]],"invertedIndex":[["",{"_index":86,"title":{"17":{}},"description":{"6":{},"12":{},"31":{}}}],["0",{"_index":272,"title":{},"description":{"31":{}}}],["1",{"_index":271,"title":{},"description":{"31":{}}}],["2",{"_index":201,"title":{},"description":{"13":{}}}],["5000",{"_index":43,"title":{},"description":{"2":{}}}],["accept",{"_index":118,"title":{},"description":{"8":{},"30":{},"31":{}}}],["accord",{"_index":196,"title":{},"description":{"13":{}}}],["ad",{"_index":157,"title":{},"description":{"12":{}}}],["add",{"_index":242,"title":{"25":{}},"description":{"25":{}}}],["addit",{"_index":165,"title":{},"description":{"12":{}}}],["advanc",{"_index":106,"title":{},"description":{"6":{}}}],["allow",{"_index":186,"title":{},"description":{"12":{},"17":{}}}],["api",{"_index":5,"title":{"0":{},"1":{}},"description":{"0":{},"1":{},"2":{},"3":{},"13":{},"14":{}}}],["api/v1",{"_index":39,"title":{},"description":{"2":{}}}],["appli",{"_index":183,"title":{},"description":{"12":{},"30":{},"31":{}}}],["applic",{"_index":191,"title":{},"description":{"12":{}}}],["argument",{"_index":129,"title":{},"description":{"11":{},"13":{}}}],["array",{"_index":94,"title":{},"description":{"6":{},"31":{}}}],["assign",{"_index":263,"title":{},"description":{"31":{}}}],["associ",{"_index":207,"title":{},"description":{"15":{}}}],["authent",{"_index":52,"title":{"3":{}},"description":{"3":{}}}],["automat",{"_index":33,"title":{},"description":{"1":{},"30":{}}}],["avail",{"_index":82,"title":{},"description":{"5":{},"11":{},"18":{}}}],["base",{"_index":48,"title":{},"description":{"2":{}}}],["basic",{"_index":83,"title":{},"description":{"5":{}}}],["be",{"_index":70,"title":{},"description":{"4":{}}}],["below",{"_index":15,"title":{},"description":{"0":{}}}],["between",{"_index":133,"title":{"12":{}},"description":{"12":{}}}],["bodi",{"_index":107,"title":{},"description":{"6":{},"31":{}}}],["boolean",{"_index":269,"title":{},"description":{"31":{}}}],["browser_step",{"_index":109,"title":{},"description":{"6":{}}}],["built",{"_index":12,"title":{},"description":{"0":{}}}],["bulk",{"_index":219,"title":{},"description":{"17":{},"30":{}}}],["categor",{"_index":216,"title":{},"description":{"17":{}}}],["certain",{"_index":253,"title":{},"description":{"28":{}}}],["chang",{"_index":71,"title":{},"description":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"14":{},"16":{},"17":{},"20":{},"22":{},"29":{}}}],["changedetection.io",{"_index":0,"title":{"0":{}},"description":{"0":{},"1":{},"2":{},"32":{}}}],["check",{"_index":73,"title":{},"description":{"4":{},"6":{},"13":{}}}],["chosen",{"_index":141,"title":{},"description":{"12":{}}}],["click",{"_index":32,"title":{},"description":{"1":{}}}],["clipboard",{"_index":35,"title":{},"description":{"1":{}}}],["collect",{"_index":251,"title":{},"description":{"28":{}}}],["color",{"_index":162,"title":{},"description":{"12":{}}}],["coloris",{"_index":189,"title":{},"description":{"12":{}}}],["comma-separ",{"_index":274,"title":{},"description":{"31":{}}}],["command",{"_index":18,"title":{},"description":{"0":{}}}],["compar",{"_index":138,"title":{},"description":{"12":{}}}],["comparison",{"_index":136,"title":{},"description":{"12":{}}}],["concis",{"_index":81,"title":{},"description":{"5":{}}}],["configur",{"_index":72,"title":{"31":{}},"description":{"4":{},"6":{},"23":{},"24":{},"25":{},"27":{},"30":{},"31":{}}}],["connect",{"_index":37,"title":{"2":{}},"description":{}}],["content",{"_index":76,"title":{},"description":{"4":{},"12":{},"13":{}}}],["convers",{"_index":268,"title":{},"description":{"31":{}}}],["copi",{"_index":34,"title":{},"description":{"1":{}}}],["core",{"_index":60,"title":{},"description":{"4":{}}}],["count",{"_index":285,"title":{},"description":{"32":{}}}],["creat",{"_index":62,"title":{"6":{},"19":{}},"description":{"4":{},"6":{},"19":{}}}],["criteria",{"_index":254,"title":{},"description":{"28":{}}}],["curl",{"_index":17,"title":{},"description":{"0":{}}}],["current",{"_index":287,"title":{},"description":{"33":{}}}],["custom",{"_index":188,"title":{},"description":{"12":{}}}],["dashboard",{"_index":30,"title":{},"description":{"1":{},"15":{}}}],["dedup",{"_index":264,"title":{},"description":{"31":{}}}],["default",{"_index":92,"title":{},"description":{"6":{},"12":{},"23":{},"31":{}}}],["delet",{"_index":65,"title":{"9":{},"22":{},"27":{}},"description":{"4":{},"9":{},"12":{},"22":{},"27":{}}}],["detail",{"_index":172,"title":{},"description":{"12":{},"32":{}}}],["detect",{"_index":125,"title":{},"description":{"10":{}}}],["dif",{"_index":168,"title":{},"description":{"12":{}}}],["diff",{"_index":179,"title":{},"description":{"12":{}}}],["differ",{"_index":132,"title":{"12":{}},"description":{"12":{},"15":{}}}],["disabl",{"_index":174,"title":{},"description":{"12":{}}}],["discord",{"_index":231,"title":{},"description":{"23":{}}}],["display",{"_index":211,"title":{},"description":{"16":{}}}],["driven",{"_index":11,"title":{},"description":{"0":{}}}],["duplic",{"_index":265,"title":{},"description":{"31":{}}}],["each",{"_index":67,"title":{},"description":{"4":{}}}],["easili",{"_index":25,"title":{},"description":{"1":{}}}],["email",{"_index":230,"title":{},"description":{"23":{}}}],["empti",{"_index":245,"title":{},"description":{"26":{}}}],["enabl",{"_index":169,"title":{},"description":{"12":{}}}],["endpoint",{"_index":137,"title":{},"description":{"12":{},"13":{},"23":{}}}],["etc",{"_index":194,"title":{},"description":{"12":{},"31":{}}}],["exampl",{"_index":14,"title":{},"description":{"0":{},"2":{},"3":{}}}],["exist",{"_index":117,"title":{},"description":{"8":{},"21":{}}}],["fals",{"_index":270,"title":{},"description":{"31":{}}}],["false/off",{"_index":177,"title":{},"description":{"12":{}}}],["faster",{"_index":23,"title":{},"description":{"0":{}}}],["favicon",{"_index":205,"title":{"15":{},"16":{}},"description":{"15":{},"16":{}}}],["fetch",{"_index":130,"title":{},"description":{"11":{},"13":{}}}],["fetch_backend",{"_index":105,"title":{},"description":{"6":{},"31":{}}}],["field",{"_index":89,"title":{},"description":{"6":{},"31":{}}}],["file",{"_index":202,"title":{},"description":{"13":{}}}],["filter",{"_index":77,"title":{},"description":{"4":{},"28":{}}}],["find",{"_index":16,"title":{"1":{}},"description":{"0":{},"1":{},"28":{}}}],["float",{"_index":281,"title":{},"description":{"31":{}}}],["format",{"_index":142,"title":{},"description":{"12":{},"31":{}}}],["found",{"_index":26,"title":{},"description":{"1":{},"2":{}}}],["from_timestamp",{"_index":152,"title":{},"description":{"12":{}}}],["full",{"_index":114,"title":{},"description":{"7":{}}}],["function",{"_index":61,"title":{},"description":{"4":{}}}],["gener",{"_index":135,"title":{},"description":{"12":{}}}],["global",{"_index":226,"title":{},"description":{"23":{}}}],["granular",{"_index":170,"title":{},"description":{"12":{}}}],["green",{"_index":164,"title":{},"description":{"12":{}}}],["group",{"_index":9,"title":{"17":{}},"description":{"0":{},"17":{}}}],["group-wid",{"_index":217,"title":{},"description":{"17":{}}}],["header",{"_index":56,"title":{},"description":{"3":{},"6":{}}}],["help",{"_index":21,"title":{},"description":{"0":{}}}],["highlight",{"_index":163,"title":{},"description":{"12":{}}}],["histor",{"_index":126,"title":{},"description":{"11":{},"12":{}}}],["histori",{"_index":123,"title":{"10":{},"11":{}},"description":{"9":{},"11":{},"12":{},"13":{},"14":{}}}],["hosted/subscript",{"_index":46,"title":{},"description":{"2":{}}}],["html",{"_index":159,"title":{},"description":{"12":{},"13":{}}}],["htmlcolor",{"_index":160,"title":{},"description":{"12":{}}}],["http",{"_index":57,"title":{},"description":{"3":{}}}],["http://localhost:5000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/histori",{"_index":44,"title":{},"description":{"2":{}}}],["https://<your",{"_index":50,"title":{},"description":{"2":{}}}],["https://github.com/caronc/apprise](https://github.com/caronc/appris",{"_index":241,"title":{},"description":{"23":{}}}],["identifi",{"_index":210,"title":{},"description":{"15":{},"28":{}}}],["imag",{"_index":206,"title":{},"description":{"15":{}}}],["implement",{"_index":187,"title":{},"description":{"12":{}}}],["import",{"_index":255,"title":{"30":{},"31":{}},"description":{"30":{},"31":{}}}],["includ",{"_index":229,"title":{},"description":{"23":{},"32":{}}}],["individu",{"_index":66,"title":{},"description":{"4":{},"13":{},"23":{}}}],["info",{"_index":84,"title":{},"description":{"5":{}}}],["inform",{"_index":111,"title":{"32":{},"33":{}},"description":{"7":{},"20":{},"32":{},"33":{}}}],["information](#operation/getwatch",{"_index":121,"title":{},"description":{"8":{}}}],["inlin",{"_index":173,"title":{},"description":{"12":{}}}],["instanc",{"_index":283,"title":{},"description":{"32":{}}}],["int",{"_index":280,"title":{},"description":{"31":{}}}],["interfac",{"_index":208,"title":{},"description":{"15":{}}}],["interv",{"_index":74,"title":{},"description":{"4":{}}}],["item1,item2",{"_index":275,"title":{},"description":{"31":{}}}],["json",{"_index":115,"title":{},"description":{"7":{},"8":{},"21":{},"31":{}}}],["keep",{"_index":200,"title":{},"description":{"13":{}}}],["key",{"_index":24,"title":{"1":{}},"description":{"1":{},"3":{},"11":{}}}],["key\":\"valu",{"_index":277,"title":{},"description":{"31":{}}}],["key](./where-to-get-api-key.jpeg",{"_index":36,"title":{},"description":{"1":{}}}],["keyword",{"_index":147,"title":{},"description":{"12":{}}}],["known",{"_index":215,"title":{},"description":{"17":{}}}],["larg",{"_index":250,"title":{},"description":{"28":{}}}],["last",{"_index":198,"title":{},"description":{"13":{}}}],["latest",{"_index":148,"title":{},"description":{"12":{},"14":{}}}],["level",{"_index":239,"title":{},"description":{"23":{}}}],["line",{"_index":19,"title":{},"description":{"0":{}}}],["line-level",{"_index":176,"title":{},"description":{"12":{}}}],["line-separ",{"_index":257,"title":{},"description":{"31":{}}}],["list",{"_index":79,"title":{"5":{},"18":{}},"description":{"5":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"18":{},"24":{},"26":{},"30":{},"31":{}}}],["local",{"_index":41,"title":{},"description":{"2":{}}}],["login",{"_index":49,"title":{},"description":{"2":{}}}],["manag",{"_index":7,"title":{"4":{},"17":{}},"description":{"0":{},"4":{}}}],["mani",{"_index":234,"title":{},"description":{"23":{}}}],["mass",{"_index":221,"title":{},"description":{"17":{}}}],["match",{"_index":252,"title":{},"description":{"28":{}}}],["method",{"_index":104,"title":{},"description":{"6":{}}}],["mode",{"_index":88,"title":{},"description":{"6":{},"12":{}}}],["monitor",{"_index":3,"title":{"0":{}},"description":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"20":{},"22":{},"28":{},"29":{},"30":{},"31":{}}}],["more",{"_index":110,"title":{},"description":{"6":{},"25":{},"27":{}}}],["multipl",{"_index":223,"title":{},"description":{"17":{},"30":{}}}],["muted/paus",{"_index":112,"title":{},"description":{"7":{}}}],["new",{"_index":85,"title":{"6":{}},"description":{}}],["no_markup=tru",{"_index":181,"title":{},"description":{"12":{}}}],["notif",{"_index":4,"title":{"0":{},"23":{},"24":{},"25":{},"26":{},"27":{}},"description":{"0":{},"4":{},"6":{},"17":{},"23":{},"24":{},"25":{},"26":{},"27":{}}}],["notification_bodi",{"_index":96,"title":{},"description":{"6":{}}}],["notification_format",{"_index":97,"title":{},"description":{"6":{}}}],["notification_mut",{"_index":98,"title":{},"description":{"6":{},"20":{}}}],["notification_titl",{"_index":95,"title":{},"description":{"6":{}}}],["notification_url",{"_index":93,"title":{},"description":{"6":{},"31":{}}}],["number",{"_index":278,"title":{},"description":{"31":{}}}],["object",{"_index":276,"title":{},"description":{"31":{}}}],["on",{"_index":243,"title":{},"description":{"25":{},"27":{}}}],["opening/clos",{"_index":185,"title":{},"description":{"12":{}}}],["oper",{"_index":220,"title":{},"description":{"17":{}}}],["option",{"_index":78,"title":{},"description":{"4":{},"6":{},"12":{},"31":{}}}],["organ",{"_index":214,"title":{},"description":{"17":{}}}],["output",{"_index":180,"title":{},"description":{"12":{}}}],["overridden",{"_index":238,"title":{},"description":{"23":{}}}],["overview",{"_index":212,"title":{},"description":{"16":{}}}],["page",{"_index":2,"title":{"0":{}},"description":{"0":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"20":{},"22":{},"29":{}}}],["paramet",{"_index":259,"title":{},"description":{"31":{}}}],["pars",{"_index":279,"title":{},"description":{"31":{}}}],["pass",{"_index":203,"title":{},"description":{"13":{},"14":{},"31":{}}}],["pattern",{"_index":247,"title":{},"description":{"28":{}}}],["paus",{"_index":103,"title":{},"description":{"6":{}}}],["perfect",{"_index":143,"title":{},"description":{"12":{}}}],["perform",{"_index":218,"title":{},"description":{"17":{}}}],["placehold",{"_index":184,"title":{},"description":{"12":{}}}],["plain",{"_index":155,"title":{},"description":{"12":{},"30":{}}}],["platform",{"_index":236,"title":{},"description":{"23":{}}}],["point",{"_index":139,"title":{},"description":{"12":{}}}],["popular",{"_index":235,"title":{},"description":{"23":{}}}],["port",{"_index":42,"title":{},"description":{"2":{}}}],["prefer",{"_index":75,"title":{},"description":{"4":{},"17":{}}}],["prefix",{"_index":158,"title":{},"description":{"12":{}}}],["previou",{"_index":150,"title":{},"description":{"12":{}}}],["processor",{"_index":87,"title":{},"description":{"6":{},"31":{}}}],["provid",{"_index":55,"title":{},"description":{"3":{},"26":{}}}],["proxi",{"_index":108,"title":{},"description":{"6":{},"30":{},"31":{}}}],["python",{"_index":20,"title":{},"description":{"0":{}}}],["queri",{"_index":128,"title":{},"description":{"11":{},"13":{},"31":{}}}],["quickli",{"_index":249,"title":{},"description":{"28":{}}}],["raw",{"_index":178,"title":{},"description":{"12":{}}}],["recent",{"_index":146,"title":{},"description":{"12":{},"14":{}}}],["recheck",{"_index":222,"title":{},"description":{"17":{},"20":{}}}],["red",{"_index":166,"title":{},"description":{"12":{}}}],["relat",{"_index":122,"title":{},"description":{"9":{},"17":{}}}],["remov",{"_index":156,"title":{},"description":{"12":{},"22":{}}}],["replac",{"_index":244,"title":{"26":{}},"description":{"26":{}}}],["repres",{"_index":68,"title":{},"description":{"4":{}}}],["request",{"_index":53,"title":{},"description":{"3":{},"31":{}}}],["requir",{"_index":54,"title":{},"description":{"3":{},"6":{}}}],["rest",{"_index":6,"title":{},"description":{"0":{}}}],["restock_diff",{"_index":90,"title":{},"description":{"6":{}}}],["retriev",{"_index":63,"title":{},"description":{"4":{},"7":{},"13":{},"15":{},"20":{},"32":{}}}],["return",{"_index":80,"title":{},"description":{"5":{},"7":{},"8":{},"12":{},"18":{},"24":{},"33":{}}}],["review",{"_index":144,"title":{},"description":{"12":{}}}],["rich",{"_index":161,"title":{},"description":{"12":{}}}],["run",{"_index":40,"title":{},"description":{"2":{}}}],["same",{"_index":119,"title":{},"description":{"8":{}}}],["schema",{"_index":260,"title":{},"description":{"31":{}}}],["search",{"_index":246,"title":{"28":{},"29":{}},"description":{"28":{},"29":{}}}],["second-most-rec",{"_index":151,"title":{},"description":{"12":{}}}],["serv",{"_index":237,"title":{},"description":{"23":{}}}],["servic",{"_index":192,"title":{},"description":{"12":{},"23":{}}}],["set",{"_index":28,"title":{},"description":{"1":{},"4":{},"6":{},"7":{},"13":{},"17":{},"20":{},"23":{},"30":{},"31":{}}}],["simpl",{"_index":13,"title":{},"description":{"0":{}}}],["simpli",{"_index":31,"title":{},"description":{"1":{}}}],["simultan",{"_index":256,"title":{},"description":{"30":{}}}],["singl",{"_index":69,"title":{"7":{},"14":{},"20":{}},"description":{"4":{},"6":{},"8":{},"11":{},"14":{},"19":{}}}],["skip",{"_index":190,"title":{},"description":{"12":{},"31":{}}}],["slack",{"_index":232,"title":{},"description":{"23":{}}}],["snapshot",{"_index":127,"title":{"12":{},"13":{},"14":{}},"description":{"11":{},"12":{},"13":{},"14":{}}}],["special",{"_index":261,"title":{},"description":{"31":{}}}],["specif",{"_index":145,"title":{},"description":{"12":{},"28":{},"31":{}}}],["start",{"_index":22,"title":{},"description":{"0":{}}}],["state",{"_index":288,"title":{},"description":{"33":{}}}],["statist",{"_index":282,"title":{},"description":{"32":{}}}],["statu",{"_index":113,"title":{},"description":{"7":{},"17":{},"20":{},"32":{}}}],["string",{"_index":101,"title":{},"description":{"6":{}}}],["structur",{"_index":120,"title":{},"description":{"8":{}}}],["support",{"_index":227,"title":{},"description":{"23":{},"31":{}}}],["syntax",{"_index":240,"title":{},"description":{"23":{}}}],["system",{"_index":199,"title":{"32":{},"33":{}},"description":{"13":{},"32":{},"33":{}}}],["systeminfo",{"_index":289,"title":{},"description":{"33":{}}}],["tab",{"_index":29,"title":{},"description":{"1":{}}}],["tag",{"_index":10,"title":{"17":{},"18":{},"19":{},"20":{},"21":{},"22":{}},"description":{"0":{},"6":{},"12":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"28":{},"30":{},"31":{}}}],["tag/group",{"_index":224,"title":{},"description":{"19":{},"22":{}}}],["tag/{uuid",{"_index":225,"title":{},"description":{"20":{},"21":{},"22":{}}}],["tag_uuid",{"_index":262,"title":{},"description":{"31":{}}}],["tags/group",{"_index":99,"title":{},"description":{"6":{},"18":{}}}],["text",{"_index":154,"title":{},"description":{"12":{},"13":{},"29":{},"30":{}}}],["text_json_diff",{"_index":91,"title":{},"description":{"6":{}}}],["time",{"_index":140,"title":{},"description":{"12":{},"13":{}}}],["time_between_check",{"_index":102,"title":{},"description":{"6":{}}}],["timestamp",{"_index":124,"title":{},"description":{"10":{},"11":{},"12":{},"13":{},"14":{}}}],["titl",{"_index":248,"title":{},"description":{"28":{},"29":{}}}],["to_timestamp",{"_index":149,"title":{},"description":{"12":{}}}],["total",{"_index":284,"title":{},"description":{"32":{}}}],["true",{"_index":266,"title":{},"description":{"31":{}}}],["tweak",{"_index":193,"title":{},"description":{"12":{}}}],["two",{"_index":134,"title":{"12":{}},"description":{"12":{},"13":{}}}],["type",{"_index":267,"title":{},"description":{"31":{}}}],["under",{"_index":27,"title":{},"description":{"1":{}}}],["unix",{"_index":153,"title":{},"description":{"12":{}}}],["updat",{"_index":64,"title":{"8":{},"21":{}},"description":{"4":{},"8":{},"21":{}}}],["uptim",{"_index":286,"title":{},"description":{"32":{}}}],["url",{"_index":38,"title":{"2":{},"24":{},"25":{},"26":{},"27":{},"31":{}},"description":{"2":{},"4":{},"6":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{}}}],["url>/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/histori",{"_index":51,"title":{},"description":{"2":{}}}],["us",{"_index":45,"title":{},"description":{"2":{},"8":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"21":{},"23":{},"28":{},"31":{}}}],["uuid",{"_index":100,"title":{},"description":{"6":{}}}],["valu",{"_index":197,"title":{},"description":{"13":{}}}],["variou",{"_index":228,"title":{},"description":{"23":{}}}],["version",{"_index":47,"title":{},"description":{"2":{},"12":{},"32":{}}}],["via",{"_index":258,"title":{},"description":{"31":{}}}],["visual",{"_index":209,"title":{},"description":{"15":{}}}],["watch",{"_index":8,"title":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"16":{},"29":{},"31":{}},"description":{"0":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"20":{},"22":{},"23":{},"28":{},"29":{},"30":{},"31":{},"32":{}}}],["watch/{uuid",{"_index":116,"title":{},"description":{"7":{},"8":{},"9":{}}}],["watch/{uuid}/difference/{from_timestamp}/{to_timestamp",{"_index":195,"title":{},"description":{"12":{}}}],["watch/{uuid}/favicon",{"_index":213,"title":{},"description":{"16":{}}}],["watch/{uuid}/histori",{"_index":131,"title":{},"description":{"11":{}}}],["watch/{uuid}/history/{timestamp",{"_index":204,"title":{},"description":{"14":{}}}],["web",{"_index":1,"title":{"0":{}},"description":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"14":{},"15":{},"16":{},"20":{},"22":{},"29":{}}}],["webhook",{"_index":233,"title":{},"description":{"23":{}}}],["without",{"_index":182,"title":{},"description":{"12":{}}}],["word-level",{"_index":167,"title":{},"description":{"12":{}}}],["word_diff=fals",{"_index":175,"title":{},"description":{"12":{}}}],["word_diff=tru",{"_index":171,"title":{},"description":{"12":{}}}],["x-api-key",{"_index":58,"title":{},"description":{"3":{}}}],["ye",{"_index":273,"title":{},"description":{"31":{}}}],["your_api_key",{"_index":59,"title":{},"description":{"3":{}}}]],"pipeline":[]}},"options":{}}; + const __redoc_state = {"menu":{"activeItemIdx":-1},"spec":{"data":{"openapi":"3.1.0","info":{"title":"ChangeDetection.io API","description":"# ChangeDetection.io Web page monitoring and notifications API\n\nREST API for managing Page watches, Group tags, and Notifications.\n\nchangedetection.io can be driven by its built in simple API, in the examples below you will also find `curl` command line and `python` examples to help you get started faster.\n\n## Where to find my API key?\n\nThe API key can be easily found under the **SETTINGS** then **API** tab of changedetection.io dashboard. \nSimply click the API key to automatically copy it to your clipboard.\n\n![Where to find the API key](./where-to-get-api-key.jpeg)\n\n## Connection URL\n\nThe 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`.\n\nIf you are using the hosted/subscription version of changedetection.io, then the URL is based on your login URL, for example: \n`https://<your login url>/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/history`\n\n## Authentication\n\nAlmost all API requests require some authentication, this is provided as an **API Key** in the header of the HTTP request.\n\nFor example: `x-api-key: YOUR_API_KEY`\n","version":"0.1.6","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. \nEach watch represents a single URL being monitored for changes, with configurable settings for check intervals, \nnotification preferences, and content filtering options.\n"},{"name":"Watch History","description":"Get a list of timestamps of all changes detected for a watch.\n"},{"name":"Snapshots","description":"Retrieve individual text snapshot of monitored content according to the `timestamp`. The text snapshot is the HTML\nto Text at page check time. \n\nSet the query argument `html` to any value to retrieve the last HTML fetched, the system only keeps the last two \n(2) HTML files fetched.\n\nUse the Watch History API endpoint to get a list of timestamps to pass to this query.\n"},{"name":"Favicon","description":"Retrieve favicon images associated with monitored web pages. These are used in the dashboard interface \nto visually identify different watches in your monitoring list.\n"},{"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 \nnotification preferences, and perform bulk operations like mass rechecking or status changes across \nmultiple related watches.\n"},{"name":"Notifications","description":"Configure global notification endpoints that can be used across all your watches. Supports various \nnotification services including email, Discord, Slack, webhooks, and many other popular platforms. \nThese settings serve as defaults that can be overridden at the individual watch or tag level.\n\nThe notification syntax uses [https://github.com/caronc/apprise](https://github.com/caronc/apprise).\n"},{"name":"Search","description":"Search and filter your watches by URL patterns, titles, or tags. Useful for quickly finding specific \nmonitors in large collections or identifying watches that match certain criteria.\n"},{"name":"Import","description":"Bulk import multiple URLs for monitoring. Accepts plain text lists of URLs and can automatically \napply tags, proxy settings, and other configurations to all imported watches simultaneously.\n"},{"name":"System Information","description":"Retrieve system status and statistics about your changedetection.io instance, including total watch \ncounts, uptime information, and version details.\n"}],"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.\n\nEnter your API key in the \"Authorize\" button above to automatically populate all code examples.\n"}},"schemas":{"WatchBase":{"type":"object","properties":{"uuid":{"type":"string","format":"uuid","description":"Unique identifier","readOnly":true},"date_created":{"type":["integer","null"],"description":"Unix timestamp of creation","readOnly":true},"url":{"type":"string","format":"uri","description":"URL to monitor for changes","maxLength":5000},"title":{"type":["string","null"],"description":"Custom title for the web page change monitor (watch), not to be confused with page_title","maxLength":5000},"tag":{"type":"string","description":"Tag UUID to associate with this web page change monitor (watch)","maxLength":5000},"tags":{"type":"array","items":{"type":"string"},"description":"Array of tag UUIDs"},"paused":{"type":"boolean","description":"Whether the web page change monitor (watch) is paused"},"notification_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","description":"Backend to use for fetching content. Common values:\n- `system` (default) - Use the system-wide default fetcher\n- `html_requests` - Fast requests-based fetcher\n- `html_webdriver` - Browser-based fetcher (Playwright/Puppeteer)\n- `extra_browser_*` - Custom browser configurations (if configured)\n- Plugin-provided fetchers (if installed)\n","pattern":"^(system|html_requests|html_webdriver|extra_browser_.+)$","default":"system"},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"HTTP headers to include in requests"},"body":{"type":["string","null"],"description":"HTTP request body","maxLength":5000},"proxy":{"type":["string","null"],"description":"Proxy configuration","maxLength":5000},"ignore_status_codes":{"type":["boolean","null"],"description":"Ignore HTTP status code errors (boolean or null)"},"webdriver_delay":{"type":["integer","null"],"description":"Delay in seconds for webdriver"},"webdriver_js_execute_code":{"type":["string","null"],"description":"JavaScript code to execute","maxLength":5000},"time_between_check":{"type":"object","properties":{"weeks":{"type":["integer","null"],"minimum":0,"maximum":52000},"days":{"type":["integer","null"],"minimum":0,"maximum":365000},"hours":{"type":["integer","null"],"minimum":0,"maximum":8760000},"minutes":{"type":["integer","null"],"minimum":0,"maximum":525600000},"seconds":{"type":["integer","null"],"minimum":0,"maximum":31536000000}},"description":"Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings."},"time_between_check_use_default":{"type":"boolean","default":true,"description":"Whether to use global settings for time between checks - defaults to true if not set"},"notification_urls":{"type":"array","items":{"type":"string","maxLength":1000},"maxItems":100,"description":"Notification URLs for this web page change monitor (watch). Maximum 100 URLs."},"notification_title":{"type":["string","null"],"description":"Custom notification title","maxLength":5000},"notification_body":{"type":["string","null"],"description":"Custom notification body","maxLength":5000},"notification_format":{"type":"string","enum":["text","html","htmlcolor","markdown","System default"],"description":"Format for notifications"},"track_ldjson_price_data":{"type":["boolean","null"],"description":"Whether to track JSON-LD price data"},"browser_steps":{"type":"array","items":{"type":"object","properties":{"operation":{"type":["string","null"],"maxLength":5000},"selector":{"type":["string","null"],"maxLength":5000},"optional_value":{"type":["string","null"],"maxLength":5000}},"required":["operation","selector","optional_value"],"additionalProperties":false},"maxItems":100,"description":"Browser automation steps. Maximum 100 steps allowed."},"processor":{"type":"string","enum":["restock_diff","text_json_diff"],"default":"text_json_diff","description":"Optional processor mode to use for change detection. Defaults to `text_json_diff` if not specified."},"include_filters":{"type":"array","items":{"type":"string","maxLength":5000},"maxItems":100,"description":"CSS/XPath selectors to extract specific content from the page"},"subtractive_selectors":{"type":"array","items":{"type":"string","maxLength":5000},"maxItems":100,"description":"CSS/XPath selectors to remove content from the page"},"ignore_text":{"type":"array","items":{"type":"string","maxLength":5000},"maxItems":100,"description":"Text patterns to ignore in change detection"},"trigger_text":{"type":"array","items":{"type":"string","maxLength":5000},"maxItems":100,"description":"Text/regex patterns that must be present to trigger a change"},"text_should_not_be_present":{"type":"array","items":{"type":"string","maxLength":5000},"maxItems":100,"description":"Text that should NOT be present (triggers alert if found)"},"extract_text":{"type":"array","items":{"type":"string","maxLength":5000},"maxItems":100,"description":"Regex patterns to extract specific text after filtering"},"trim_text_whitespace":{"type":"boolean","default":false,"description":"Strip leading/trailing whitespace from text"},"sort_text_alphabetically":{"type":"boolean","default":false,"description":"Sort lines alphabetically before comparison"},"remove_duplicate_lines":{"type":"boolean","default":false,"description":"Remove duplicate lines from content"},"check_unique_lines":{"type":"boolean","default":false,"description":"Compare against all history for unique lines"},"strip_ignored_lines":{"type":["boolean","null"],"description":"Remove lines matching ignore patterns"},"filter_text_added":{"type":"boolean","default":true,"description":"Include added text in change detection"},"filter_text_removed":{"type":"boolean","default":true,"description":"Include removed text in change detection"},"filter_text_replaced":{"type":"boolean","default":true,"description":"Include replaced text in change detection"},"in_stock_only":{"type":"boolean","default":true,"description":"Only trigger on in-stock transitions (restock_diff processor)"},"follow_price_changes":{"type":"boolean","default":true,"description":"Monitor and track price changes (restock_diff processor)"},"price_change_threshold_percent":{"type":["number","null"],"description":"Minimum price change percentage to trigger notification"},"has_ldjson_price_data":{"type":["boolean","null"],"description":"Whether page has LD-JSON price data (auto-detected)","readOnly":true},"notification_screenshot":{"type":"boolean","default":false,"description":"Include screenshot in notifications (if supported by notification URL)"},"filter_failure_notification_send":{"type":"boolean","default":true,"description":"Send notification when filters fail to match content"},"use_page_title_in_list":{"type":["boolean","null"],"description":"Display page title in watch list (null = use system default)"},"history_snapshot_max_length":{"type":["integer","null"],"minimum":1,"maximum":1000,"description":"Maximum number of history snapshots to keep (null = use system default)"},"time_schedule_limit":{"type":"object","description":"Weekly schedule limiting when checks can run","properties":{"enabled":{"type":"boolean","default":false},"monday":{"$ref":"#/components/schemas/DaySchedule"},"tuesday":{"$ref":"#/components/schemas/DaySchedule"},"wednesday":{"$ref":"#/components/schemas/DaySchedule"},"thursday":{"$ref":"#/components/schemas/DaySchedule"},"friday":{"$ref":"#/components/schemas/DaySchedule"},"saturday":{"$ref":"#/components/schemas/DaySchedule"},"sunday":{"$ref":"#/components/schemas/DaySchedule"}}},"conditions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Field to check (e.g., 'page_filtered_text', 'page_title')"},"operator":{"type":"string","description":"Comparison operator (e.g., 'contains_regex', 'equals', 'not_equals')"},"value":{"type":"string","description":"Value to compare against"}},"required":["field","operator","value"]},"maxItems":100,"description":"Array of condition rules for change detection logic (empty array when not set)"},"conditions_match_logic":{"type":"string","enum":["ALL","ANY"],"default":"ALL","description":"Logic operator - ALL (match all conditions) or ANY (match any condition)"}}},"DaySchedule":{"type":"object","properties":{"enabled":{"type":"boolean","default":true},"start_time":{"type":"string","pattern":"^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$","default":"00:00","description":"Start time in HH:MM format"},"duration":{"type":"object","properties":{"hours":{"type":"string","pattern":"^[0-9]+$","default":"24"},"minutes":{"type":"string","pattern":"^[0-9]+$","default":"00"}}}}},"Watch":{"allOf":[{"$ref":"#/components/schemas/WatchBase"},{"type":"object","properties":{"last_checked":{"type":"integer","description":"Unix timestamp of last check","readOnly":true},"last_changed":{"type":"integer","description":"Unix timestamp of last change","readOnly":true,"x-computed":true},"last_error":{"type":["string","boolean","null"],"description":"Last error message (false when no error, string when error occurred, null if not checked yet)","readOnly":true},"last_viewed":{"type":"integer","description":"Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than `last_changed` in the \"Update watch\" endpoint marks the watch as viewed.","minimum":0},"link":{"type":"string","format":"string","description":"The watch URL rendered in case of any Jinja2 markup, always use this for listing.","readOnly":true,"x-computed":true},"page_title":{"type":["string","null"],"description":"HTML <title> tag extracted from the page","readOnly":true},"check_count":{"type":"integer","description":"Total number of checks performed","readOnly":true},"fetch_time":{"type":"number","description":"Duration of last fetch in seconds","readOnly":true},"previous_md5":{"type":["string","boolean"],"description":"MD5 hash of previous content (false if not set)","readOnly":true},"previous_md5_before_filters":{"type":["string","boolean"],"description":"MD5 hash before filters applied (false if not set)","readOnly":true},"consecutive_filter_failures":{"type":"integer","description":"Counter for consecutive filter match failures","readOnly":true},"last_notification_error":{"type":["string","null"],"description":"Last notification error message","readOnly":true},"notification_alert_count":{"type":"integer","description":"Number of notifications sent","readOnly":true},"content-type":{"type":["string","null"],"description":"Content-Type from last fetch","readOnly":true},"remote_server_reply":{"type":["string","null"],"description":"Server header from last response","readOnly":true},"browser_steps_last_error_step":{"type":["integer","null"],"description":"Last browser step that caused an error","readOnly":true},"viewed":{"type":["integer","boolean"],"description":"Computed property - true if watch has been viewed, false otherwise (deprecated, use last_viewed instead)","readOnly":true,"x-computed":true},"history_n":{"type":"integer","description":"Number of history snapshots available","readOnly":true,"x-computed":true}}}]},"CreateWatch":{"allOf":[{"$ref":"#/components/schemas/WatchBase"},{"type":"object","required":["url"]}]},"UpdateWatch":{"allOf":[{"$ref":"#/components/schemas/WatchBase"},{"type":"object","properties":{"last_viewed":{"type":"integer","description":"Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than `last_changed` in the \"Update watch\" endpoint marks the watch as viewed.","minimum":0}}}]},"Tag":{"allOf":[{"$ref":"#/components/schemas/WatchBase"},{"type":"object","properties":{"overrides_watch":{"type":"boolean","description":"If true, this tag's settings override watch settings for all watches in this tag/group"}}}]},"CreateTag":{"allOf":[{"$ref":"#/components/schemas/Tag"},{"type":"object","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 web page change monitors (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 web page change monitors (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":{"operationId":"listWatches","tags":["Watch Management"],"summary":"List all watches","description":"Return concise list of available web page change monitors (watches) and basic info","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/watch\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/watch', headers=headers)\nprint(response.json())\n"}],"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?id={{1+1}} - the raw URL","link":"http://example.com?id=2 - the rendered URL, always use this for listing.","title":"Example Website Monitor - manually entered title/description","page_title":"The HTML <title> from the page","tags":["550e8400-e29b-41d4-a716-446655440000"],"paused":false,"notification_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":"http://example.com?id={{1+1}} - the raw URL","link":"http://example.com?id=2 - the rendered URL, always use this for listing.","title":"News Site Tracker - manually entered title/description","page_title":"The HTML <title> from the page","tags":["330e8400-e29b-41d4-a716-446655440001"],"paused":false,"notification_muted":true,"method":"GET","fetch_backend":"html_webdriver","last_checked":1640998800,"last_changed":1640995200}}}}}}},"post":{"operationId":"createWatch","tags":["Watch Management"],"summary":"Create a new watch","description":"Create a single web page change monitor (watch). Requires at least `url` to be set.\n\nEvery watch can be configured with:\n- **Processor mode**: `processor` field (`restock_diff` or `text_json_diff` - default)\n- **Notification settings**: `notification_urls` (array), `notification_title`, `notification_body`, `notification_format`, `notification_muted`\n- **Tags/Groups**: `tag` (UUID string) or `tags` (array of UUIDs)\n- **Check settings**: `time_between_check`, `paused`, `method`, `fetch_backend`\n- **Advanced options**: `headers`, `body`, `proxy`, `browser_steps`, and more\n","x-code-samples":[{"lang":"curl","source":"curl -X POST \"http://localhost:5000/api/v1/watch\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"url\": \"https://example.com\",\n \"title\": \"Example Site Monitor\",\n \"time_between_check\": {\n \"hours\": 1\n }\n }'\n"},{"lang":"Python","source":"import requests\nimport json\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'url': 'https://example.com',\n 'title': 'Example Site Monitor',\n 'time_between_check': {\n 'hours': 1\n }\n}\nresponse = requests.post('http://localhost:5000/api/v1/watch',\n headers=headers, json=data)\nprint(response.text)\n"}],"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":"Web page change monitor (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":"getWatch","tags":["Watch Management"],"summary":"Get single watch","description":"Retrieve web page change monitor (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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}', headers=headers)\nprint(response.json())\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}},{"name":"recheck","in":"query","description":"Recheck this web page change monitor (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":"Web page change monitor (watch) not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"updateWatch","tags":["Watch Management"],"summary":"Update watch","description":"Update an existing web page change monitor (watch) using JSON. Accepts the same structure as returned in [get single watch information](#operation/getWatch).","x-code-samples":[{"lang":"curl","source":"curl -X PUT \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"url\": \"https://updated-example.com\",\n \"title\": \"Updated Monitor\",\n \"paused\": false\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\ndata = {\n 'url': 'https://updated-example.com',\n 'title': 'Updated Monitor',\n 'paused': False\n}\nresponse = requests.put(f'http://localhost:5000/api/v1/watch/{uuid}', \n headers=headers, json=data)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWatch"}}}},"responses":{"200":{"description":"Web page change monitor (watch) updated successfully","content":{"text/plain":{"schema":{"type":"string","example":"OK"}}}},"500":{"description":"Server error"}}},"delete":{"operationId":"deleteWatch","tags":["Watch Management"],"summary":"Delete watch","description":"Delete a web page change monitor (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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.delete(f'http://localhost:5000/api/v1/watch/{uuid}', headers=headers)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Web page change monitor (watch) deleted successfully","content":{"text/plain":{"schema":{"type":"string","example":"OK"}}}}}}},"/watch/{uuid}/history":{"get":{"operationId":"getWatchHistory","tags":["Watch History"],"summary":"Get watch history","description":"Get a list of all historical snapshots available for a web page change monitor (watch), use the key `timestamp`\nas the query argument for fetching a single watch history snapshot.\n","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/history\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/history', headers=headers)\nprint(response.json())\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (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":"Web page change monitor (watch) not found"}}}},"/watch/{uuid}/history/{timestamp}":{"get":{"operationId":"getWatchSnapshot","tags":["Snapshots"],"summary":"Get single snapshot","description":"Get single snapshot from web page change monitor (watch). Use 'latest' for the most recent snapshot.\nUse the Watch History API to get a list of timestamps to pass.\n","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/history/latest\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\ntimestamp = 'latest' # or use specific timestamp like 1640995200\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/history/{timestamp}', headers=headers)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (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}/difference/{from_timestamp}/{to_timestamp}":{"get":{"operationId":"getWatchHistoryDiff","tags":["Watch History"],"summary":"Get the difference between two snapshots","description":"Generate a difference (comparison) between two historical snapshots of a web page change monitor (watch).\n\nThis endpoint compares content between two points in time and returns the differences in your chosen format.\nPerfect for reviewing what changed between specific versions or comparing recent changes.\n\n**Timestamp Keywords:**\n- Use `'latest'` for the most recent snapshot (to_timestamp)\n- Use `'previous'` for the second-most-recent snapshot (from_timestamp)\n- Or use specific Unix timestamps from the watch history\n\n**Format Options:**\n- `text` (default): Plain text with (removed) and (added) prefixes\n- `html`: HTML format with (removed) and (added) text\n- `htmlcolor`: Rich HTML with colored highlights (green for additions, red for deletions)\n\n**Word-Level Diffing:**\n- Enable word-level granularity with `word_diff=true` for detailed inline comparisons\n- Disable with `word_diff=false` for line-level comparisons only (default false/off, line-level mode by default)\n\n**Raw Diff Output:**\n- Use `no_markup=true` to get raw diff content without any formatting applied\n- Returns content with placeholders for opening/closing tags of changes\n- Allows you to implement your own custom colorisation or formatting\n- Skips all HTML color application and service tweaks (added text, html color tags, etc)\n","x-code-samples":[{"lang":"curl","source":"# Compare previous snapshot to latest with colored HTML\ncurl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/difference/previous/latest?format=htmlcolor\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n\n# Compare two specific timestamps in plain text with word-level diff\ncurl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/difference/1640995200/1640998800?format=text&word_diff=true\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n\n# Show only additions (hide removed/replaced content), ignore whitespace\ncurl -X GET \"http://localhost:5000/api/v1/watch/095be615-a8ad-4c33-8e9c-c7612fbf6c9f/difference/previous/latest?format=htmlcolor&removed=false&replaced=false&ignoreWhitespace=true\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\n\n# Compare previous to latest with colored HTML output\nresponse = requests.get(\n f'http://localhost:5000/api/v1/watch/{uuid}/difference/previous/latest',\n headers=headers,\n params={'format': 'htmlcolor'}\n)\nprint(response.text)\n\n# Compare specific timestamps with word-level diff\nfrom_ts = '1640995200'\nto_ts = '1640998800'\nresponse = requests.get(\n f'http://localhost:5000/api/v1/watch/{uuid}/difference/{from_ts}/{to_ts}',\n headers=headers,\n params={'format': 'text', 'word_diff': 'true'}\n)\nprint(response.text)\n\n# Show only additions, ignore whitespace and use word-level diff\nresponse = requests.get(\n f'http://localhost:5000/api/v1/watch/{uuid}/difference/previous/latest',\n headers=headers,\n params={\n 'format': 'htmlcolor',\n 'type': 'diffWords',\n 'removed': 'false',\n 'replaced': 'false',\n 'ignoreWhitespace': 'true'\n }\n)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (watch) unique ID","schema":{"type":"string","format":"uuid"}},{"name":"from_timestamp","in":"path","required":true,"description":"Starting snapshot timestamp, 'previous' for second-most-recent, or specific Unix timestamp","schema":{"oneOf":[{"type":"integer","description":"Unix timestamp of the starting snapshot"},{"type":"string","enum":["previous"],"description":"Use 'previous' to automatically select the second-most-recent snapshot"}]},"example":"previous"},{"name":"to_timestamp","in":"path","required":true,"description":"Ending snapshot timestamp, 'latest' for most recent, or specific Unix timestamp","schema":{"oneOf":[{"type":"integer","description":"Unix timestamp of the ending snapshot"},{"type":"string","enum":["latest"],"description":"Use 'latest' to automatically select the most recent snapshot"}]},"example":"latest"},{"name":"format","in":"query","description":"Output format for the diff:\n- `text` (default): Plain text with (removed) and (added) prefixes\n- `html`: Basic HTML format\n- `htmlcolor`: Rich HTML with colored backgrounds (red for deletions, green for additions)\n- `markdown`: Markdown format with HTML rendering\n","schema":{"type":"string","enum":["text","html","htmlcolor","markdown"],"default":"text"}},{"name":"word_diff","in":"query","description":"Enable word-level diffing for more granular comparisons.\nWhen enabled, changes are highlighted at the word level rather than line level.\nDefault is false (line-level mode).\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"false"}},{"name":"no_markup","in":"query","description":"When set to true, returns the raw diff content without any markup formatting.\nThe content will include placeholders for opening/closing tags of the changes,\nallowing you to implement your own custom colorisation or formatting.\nThis skips all HTML color application and service tweaks.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"false"}},{"name":"type","in":"query","description":"Diff granularity type:\n- `diffLines` (default): Line-level comparison, showing which lines changed\n- `diffWords`: Word-level comparison, showing which words changed within lines\n\nThis parameter is an alternative to `word_diff` for better alignment with the UI.\nIf both are specified, `type=diffWords` will enable word-level diffing.\n","schema":{"type":"string","enum":["diffLines","diffWords"],"default":"diffLines"}},{"name":"changesOnly","in":"query","description":"When enabled, only show lines/content that changed (no surrounding context).\nWhen disabled, include unchanged lines for context around changes.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}},{"name":"ignoreWhitespace","in":"query","description":"When enabled, ignore whitespace-only changes (spaces, tabs, newlines).\nUseful for focusing on content changes and ignoring formatting differences.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"false"}},{"name":"removed","in":"query","description":"Include removed/deleted content in the diff output.\nWhen disabled, content that was deleted will not appear in the diff.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}},{"name":"added","in":"query","description":"Include added/new content in the diff output.\nWhen disabled, content that was added will not appear in the diff.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}},{"name":"replaced","in":"query","description":"Include replaced/modified content in the diff output.\nWhen disabled, content that was modified (changed from one value to another) will not appear in the diff.\nAccepts: true, false, 1, 0, yes, no, on, off\n","schema":{"type":"string","enum":["true","false","1","0","yes","no","on","off"],"default":"true"}}],"responses":{"200":{"description":"Formatted diff between the two snapshots","content":{"text/plain":{"schema":{"type":"string","description":"Plain text diff with change markers"}},"text/html":{"schema":{"type":"string","description":"HTML formatted diff with styling"}}}},"400":{"description":"Invalid format parameter or invalid request"},"404":{"description":"Watch not found, timestamps not found, or insufficient history"}}}},"/watch/{uuid}/favicon":{"get":{"operationId":"getWatchFavicon","tags":["Favicon"],"summary":"Get watch favicon","description":"Get the favicon for a web page change monitor (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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n --output favicon.ico\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nuuid = '095be615-a8ad-4c33-8e9c-c7612fbf6c9f'\nresponse = requests.get(f'http://localhost:5000/api/v1/watch/{uuid}/favicon', headers=headers)\nwith open('favicon.ico', 'wb') as f:\n f.write(response.content)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Web page change monitor (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":{"operationId":"listTags","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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/tags', headers=headers)\nprint(response.json())\n"}],"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":{"post":{"operationId":"createTag","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"title\": \"Important Sites\"\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {'title': 'Important Sites'}\nresponse = requests.post('http://localhost:5000/api/v1/tag',\n headers=headers, json=data)\nprint(response.json())\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTag"},"example":{"title":"Important Sites"}}}},"responses":{"201":{"description":"Tag created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string","format":"uuid","description":"UUID of the created tag"}}}}}},"400":{"description":"Invalid or unsupported tag"}}}},"/tag/{uuid}":{"get":{"operationId":"getTag","tags":["Group / Tag Management"],"summary":"Get single tag","description":"Retrieve tag information, set notification_muted status, recheck all web page change monitors (watches) in tag.","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\ntag_uuid = '550e8400-e29b-41d4-a716-446655440000'\nresponse = requests.get(f'http://localhost:5000/api/v1/tag/{tag_uuid}', headers=headers)\nprint(response.json())\n"}],"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 web page change monitors (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":{"operationId":"updateTag","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"title\": \"Updated Production Sites\",\n \"notification_muted\": false\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ntag_uuid = '550e8400-e29b-41d4-a716-446655440000'\ndata = {\n 'title': 'Updated Production Sites',\n 'notification_muted': False\n}\nresponse = requests.put(f'http://localhost:5000/api/v1/tag/{tag_uuid}', \n headers=headers, json=data)\nprint(response.text)\n"}],"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":{"operationId":"deleteTag","tags":["Group / Tag Management"],"summary":"Delete tag","description":"Delete a tag/group and remove it from all web page change monitors (watches)","x-code-samples":[{"lang":"curl","source":"curl -X DELETE \"http://localhost:5000/api/v1/tag/550e8400-e29b-41d4-a716-446655440000\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\ntag_uuid = '550e8400-e29b-41d4-a716-446655440000'\nresponse = requests.delete(f'http://localhost:5000/api/v1/tag/{tag_uuid}', headers=headers)\nprint(response.text)\n"}],"parameters":[{"name":"uuid","in":"path","required":true,"description":"Tag unique ID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Tag deleted successfully"}}}},"/notifications":{"get":{"operationId":"getNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/notifications', headers=headers)\nprint(response.json())\n"}],"responses":{"200":{"description":"List of notification URLs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationUrls"}}}}}},"post":{"operationId":"addNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"notification_urls\": [\n \"mailto:admin@example.com\",\n \"discord://webhook_id/webhook_token\"\n ]\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'notification_urls': [\n 'mailto:admin@example.com',\n 'discord://webhook_id/webhook_token'\n ]\n}\nresponse = requests.post('http://localhost:5000/api/v1/notifications', \n headers=headers, json=data)\nprint(response.json())\n"}],"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":{"operationId":"replaceNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"notification_urls\": [\n \"mailto:newadmin@example.com\"\n ]\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'notification_urls': [\n 'mailto:newadmin@example.com'\n ]\n}\nresponse = requests.put('http://localhost:5000/api/v1/notifications', \n headers=headers, json=data)\nprint(response.json())\n"}],"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":{"operationId":"deleteNotifications","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\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"notification_urls\": [\n \"mailto:admin@example.com\"\n ]\n }'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'application/json'\n}\ndata = {\n 'notification_urls': [\n 'mailto:admin@example.com'\n ]\n}\nresponse = requests.delete('http://localhost:5000/api/v1/notifications', \n headers=headers, json=data)\nprint(response.status_code)\n"}],"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":{"operationId":"searchWatches","tags":["Search"],"summary":"Search watches","description":"Search web page change monitors (watches) by URL or title text","x-code-samples":[{"lang":"curl","source":"curl -X GET \"http://localhost:5000/api/v1/search?q=example.com\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nparams = {'q': 'example.com'}\nresponse = requests.get('http://localhost:5000/api/v1/search', \n headers=headers, params=params)\nprint(response.json())\n"}],"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","tags":["550e8400-e29b-41d4-a716-446655440000"],"paused":false,"notification_muted":false}}}}}}}}},"/import":{"post":{"operationId":"importWatches","tags":["Import"],"summary":"Import watch URLs with configuration","description":"Import a list of URLs to monitor with optional watch configuration. Accepts line-separated URLs in request body.\n\n**Configuration via Query Parameters:**\n\nYou can pass ANY watch configuration field as query parameters to apply settings to all imported watches.\nAll parameters from the Watch schema are supported (processor, fetch_backend, notification_urls, etc.).\n\n**Special Parameters:**\n- `tag` / `tag_uuids` - Assign tags to imported watches\n- `proxy` - Use specific proxy for imported watches\n- `dedupe` - Skip duplicate URLs (default: true)\n\n**Type Conversion:**\n- Booleans: `true`, `false`, `1`, `0`, `yes`, `no`\n- Arrays: Comma-separated or JSON format (`[item1,item2]`)\n- Objects: JSON format (`{\"key\":\"value\"}`)\n- Numbers: Parsed as int or float\n","x-code-samples":[{"lang":"curl","source":"# Basic import\ncurl -X POST \"http://localhost:5000/api/v1/import\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: text/plain\" \\\n -d $'https://example.com\\nhttps://example.org\\nhttps://example.net'\n\n# Import with processor and fetch backend\ncurl -X POST \"http://localhost:5000/api/v1/import?processor=restock_diff&fetch_backend=html_webdriver\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: text/plain\" \\\n -d $'https://example.com\\nhttps://example.org'\n\n# Import with multiple settings\ncurl -X POST \"http://localhost:5000/api/v1/import?processor=restock_diff&paused=true&tag=production\" \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: text/plain\" \\\n -d $'https://example.com'\n"},{"lang":"Python","source":"import requests\n\nheaders = {\n 'x-api-key': 'YOUR_API_KEY',\n 'Content-Type': 'text/plain'\n}\n\n# Basic import\nurls = 'https://example.com\\nhttps://example.org\\nhttps://example.net'\nresponse = requests.post('http://localhost:5000/api/v1/import',\n headers=headers, data=urls)\nprint(response.json())\n\n# Import with configuration\nparams = {\n 'processor': 'restock_diff',\n 'fetch_backend': 'html_webdriver',\n 'paused': 'false',\n 'tag': 'production'\n}\nresponse = requests.post('http://localhost:5000/api/v1/import',\n headers=headers, params=params, data=urls)\nprint(response.json())\n"}],"parameters":[{"name":"tag_uuids","in":"query","description":"Tag UUID(s) to apply to imported watches (comma-separated for multiple)","schema":{"type":"string"},"example":"550e8400-e29b-41d4-a716-446655440000"},{"name":"tag","in":"query","description":"Tag name to apply to imported watches","schema":{"type":"string"},"example":"production"},{"name":"proxy","in":"query","description":"Proxy key to use for imported watches","schema":{"type":"string"},"example":"proxy1"},{"name":"dedupe","in":"query","description":"Skip duplicate URLs (default true)","schema":{"type":"boolean","default":true}}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"string"},"example":"https://example.com\nhttps://example.org\nhttps://example.net\n"}}},"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":{"operationId":"getSystemInfo","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\" \\\n -H \"x-api-key: YOUR_API_KEY\"\n"},{"lang":"Python","source":"import requests\n\nheaders = {'x-api-key': 'YOUR_API_KEY'}\nresponse = requests.get('http://localhost:5000/api/v1/systeminfo', headers=headers)\nprint(response.json())\n"}],"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"}}}}}}}}}},"searchIndex":{"store":["section/ChangeDetection.io-Web-page-monitoring-and-notifications-API","section/ChangeDetection.io-Web-page-monitoring-and-notifications-API/Where-to-find-my-API-key","section/ChangeDetection.io-Web-page-monitoring-and-notifications-API/Connection-URL","section/ChangeDetection.io-Web-page-monitoring-and-notifications-API/Authentication","tag/Watch-Management","tag/Watch-Management/operation/listWatches","tag/Watch-Management/operation/createWatch","tag/Watch-Management/operation/getWatch","tag/Watch-Management/operation/updateWatch","tag/Watch-Management/operation/deleteWatch","tag/Watch-History","tag/Watch-History/operation/getWatchHistory","tag/Watch-History/operation/getWatchHistoryDiff","tag/Snapshots","tag/Snapshots/operation/getWatchSnapshot","tag/Favicon","tag/Favicon/operation/getWatchFavicon","tag/Group-Tag-Management","tag/Group-Tag-Management/operation/listTags","tag/Group-Tag-Management/operation/createTag","tag/Group-Tag-Management/operation/getTag","tag/Group-Tag-Management/operation/updateTag","tag/Group-Tag-Management/operation/deleteTag","tag/Notifications","tag/Notifications/operation/getNotifications","tag/Notifications/operation/addNotifications","tag/Notifications/operation/replaceNotifications","tag/Notifications/operation/deleteNotifications","tag/Search","tag/Search/operation/searchWatches","tag/Import","tag/Import/operation/importWatches","tag/System-Information","tag/System-Information/operation/getSystemInfo"],"index":{"version":"2.3.9","fields":["title","description"],"fieldVectors":[["title/0",[0,1.105,1,0.486,2,0.414,3,0.319,4,0.486,5,0.845]],["description/0",[0,1.778,2,0.666,4,0.783,5,1.893,6,3.026,7,1.971,8,0.014,9,2.212,10,0.613,11,3.026,12,3.026,13,3.026,14,3.08,15,3.026,16,1.971,17,3.026,18,3.026,19,3.026,20,3.026,21,3.026,22,3.026,23,3.026]],["title/1",[5,1.249,16,1.811,24,1.811]],["description/1",[0,1.916,5,2.43,16,2.124,24,2.888,25,3.261,26,2.732,27,3.261,28,1.247,29,3.261,30,2.732,31,3.261,32,3.261,33,2.732,34,3.261,35,3.261,36,3.261]],["title/2",[37,3.308,38,0.728]],["description/2",[0,2.507,5,1.385,14,3.119,26,2.582,38,1.077,39,3.082,40,3.082,41,3.082,42,3.082,43,3.082,44,3.082,45,1.007,46,3.082,47,2.253,48,3.082,49,4.266,50,3.082,51,3.082]],["title/3",[52,3.42]],["description/3",[5,2.196,14,2.759,24,2.458,52,3.162,53,4.094,54,3.162,55,3.162,56,3.162,57,3.774,58,3.774,59,3.774]],["title/4",[7,2.154,8,0.015]],["description/4",[1,0.718,2,0.611,3,0.673,4,0.718,7,1.808,8,0.018,28,1.061,38,0.611,60,2.776,61,2.776,62,1.631,63,1.484,64,1.631,65,1.247,66,2.03,67,2.776,68,2.776,69,1.149,70,2.776,71,0.718,72,1.149,73,2.03,74,2.776,75,2.326,76,2.03,77,2.326,78,1.808]],["title/5",[8,0.015,79,0.925]],["description/5",[1,0.998,2,0.85,3,0.656,8,0.023,71,0.998,79,1.08,80,1.888,81,3.861,82,2.822,83,3.861,84,3.861]],["title/6",[8,0.013,62,1.634,85,2.781]],["description/6",[1,0.508,2,0.432,3,0.334,4,0.508,8,0.017,10,0.62,28,1.438,38,0.432,54,1.646,56,1.646,62,1.154,69,0.813,71,0.508,72,0.813,73,1.436,78,1.28,86,3.175,87,2.565,88,1.646,89,1.646,90,1.965,91,1.965,92,1.28,93,1.646,94,2.565,95,1.965,96,1.965,97,1.965,98,1.646,99,1.646,100,3.062,101,1.965,102,1.965,103,1.965,104,1.965,105,1.646,106,1.965,107,1.646,108,1.436,109,1.965,110,1.436]],["title/7",[8,0.015,69,1.37]],["description/7",[1,0.934,2,0.795,3,0.613,8,0.022,28,1.381,63,1.93,71,0.934,80,1.766,111,1.93,112,3.612,113,2.352,114,3.612,115,2.352,116,2.64]],["title/8",[8,0.015,64,1.944]],["description/8",[1,0.895,2,0.762,3,0.588,8,0.021,45,1.132,64,2.035,69,1.434,71,0.895,80,1.694,115,2.255,116,2.531,117,2.901,118,2.531,119,3.463,120,3.463,121,3.463]],["title/9",[8,0.015,65,1.486]],["description/9",[1,1.072,2,0.912,3,0.704,8,0.019,65,1.863,71,1.072,116,3.031,122,3.474,123,2.028]],["title/10",[8,0.015,123,1.618]],["description/10",[8,0.021,71,1.19,79,1.287,124,2.703,125,4.601]],["title/11",[8,0.015,123,1.618]],["description/11",[1,0.843,2,0.718,3,0.554,8,0.02,24,2.124,45,1.066,69,1.35,71,0.843,79,0.912,82,2.384,123,1.595,124,1.916,126,2.732,127,2.169,128,2.384,129,2.732,130,2.732,131,3.261]],["title/12",[127,1.173,132,1.753,133,2.009,134,1.753]],["description/12",[1,0.255,2,0.217,3,0.167,8,0.008,10,0.349,45,0.903,47,0.72,65,0.443,71,0.714,76,1.683,78,0.642,80,0.844,86,3.003,88,0.826,92,1.499,123,0.482,124,1.014,126,0.826,127,1.126,132,1.261,133,1.928,134,1.261,135,0.985,136,2.302,137,0.72,138,1.725,139,0.985,140,0.826,141,0.985,142,2.631,143,0.985,144,0.985,145,1.261,146,1.446,147,0.985,148,0.826,149,0.985,150,0.985,151,0.985,152,0.985,153,0.985,154,1.799,155,0.826,156,1.446,157,2.302,158,0.985,159,2.631,160,0.985,161,0.985,162,2.302,163,0.985,164,0.985,165,0.985,166,0.985,167,1.725,168,0.985,169,0.985,170,0.985,171,0.985,172,0.826,173,0.985,174,0.985,175,0.985,176,1.725,177,0.985,178,1.725,179,1.725,180,0.985,181,0.985,182,0.985,183,0.72,184,0.985,185,0.985,186,0.826,187,0.985,188,0.985,189,0.985,190,0.826,191,0.985,192,0.826,193,0.985,194,0.826,195,0.985]],["title/13",[127,1.997]],["description/13",[2,0.51,3,0.393,5,1.041,8,0.011,28,0.886,45,0.757,63,1.856,66,1.694,73,1.694,76,1.694,79,0.648,123,1.133,124,2.04,127,1.698,128,2.539,129,1.941,130,2.91,134,1.694,137,1.694,140,1.941,154,2.713,159,3.877,196,2.317,197,2.317,198,3.473,199,1.361,200,2.317,201,2.317,202,2.317,203,1.694]],["title/14",[69,1.37,127,1.618]],["description/14",[1,0.86,2,0.732,3,0.565,5,1.494,8,0.021,45,1.469,69,1.377,71,0.86,79,0.93,123,1.627,124,1.954,127,2.198,146,2.787,148,2.787,203,2.431,204,3.326]],["title/15",[205,2.659]],["description/15",[1,0.914,2,0.778,3,0.795,8,0.016,30,2.962,45,1.156,63,1.89,79,0.989,132,2.585,205,2.303,206,3.536,207,3.536,208,3.536,209,3.536,210,2.962]],["title/16",[8,0.015,205,2.154]],["description/16",[1,1.022,2,0.87,3,0.671,8,0.023,71,1.022,79,1.105,205,2.573,211,3.952,212,3.952,213,3.952]],["title/17",[7,1.562,9,1.753,10,0.485,86,1.562]],["description/17",[3,0.505,4,0.769,8,0.019,9,3.042,10,0.842,28,1.136,45,0.972,71,0.769,75,2.491,113,1.936,122,2.491,186,2.491,214,2.973,215,2.973,216,2.973,217,2.973,218,2.973,219,2.491,220,2.973,221,2.973,222,2.491,223,2.491]],["title/18",[10,0.67,79,0.925]],["description/18",[10,0.931,79,1.287,80,2.25,82,3.363,99,3.855]],["title/19",[10,0.67,62,1.944]],["description/19",[10,0.957,62,2.779,69,1.958,224,3.963]],["title/20",[10,0.67,69,1.37]],["description/20",[1,0.954,2,0.812,3,0.627,8,0.017,10,0.975,28,1.411,63,1.973,71,0.954,98,3.093,111,1.973,113,2.404,222,3.093,225,2.698]],["title/21",[10,0.67,64,1.944]],["description/21",[10,0.906,45,1.464,64,2.631,115,2.916,117,3.752,225,3.274]],["title/22",[10,0.67,65,1.486]],["description/22",[1,1.072,2,0.912,3,0.704,8,0.019,65,1.863,71,1.072,156,3.474,224,3.474,225,3.031]],["title/23",[4,1.056]],["description/23",[4,1.185,8,0.018,10,0.553,28,1.044,45,1.281,66,1.997,72,1.131,92,1.779,137,1.997,192,2.288,226,2.731,227,2.288,228,2.731,229,2.288,230,2.731,231,2.731,232,2.731,233,2.731,234,2.731,235,2.731,236,2.731,237,2.731,238,2.731,239,2.731,240,2.731,241,2.731]],["title/24",[4,0.855,38,0.728]],["description/24",[4,1.407,38,0.985,72,1.854,79,1.253,80,2.19]],["title/25",[4,0.719,38,0.612,242,2.33]],["description/25",[4,1.384,38,0.96,72,1.806,110,3.189,242,3.655,243,3.655]],["title/26",[4,0.719,38,0.612,244,2.33]],["description/26",[4,1.384,38,0.96,55,3.655,79,1.22,244,3.655,245,4.362]],["title/27",[4,0.719,38,0.612,65,1.249]],["description/27",[4,1.384,38,0.96,65,1.96,72,1.806,110,3.189,243,3.655]],["title/28",[246,2.659]],["description/28",[3,0.565,8,0.021,10,0.673,16,2.166,38,0.732,45,1.087,77,2.787,145,2.431,210,2.787,246,2.166,247,3.326,248,2.787,249,3.326,250,3.326,251,3.326,252,3.326,253,3.326,254,3.326]],["title/29",[8,0.015,246,2.154]],["description/29",[1,1.046,2,0.891,3,0.687,8,0.018,38,0.891,71,1.046,154,2.635,246,3.328,248,3.391]],["title/30",[255,2.659]],["description/30",[3,0.565,8,0.015,10,0.673,28,1.271,33,2.787,38,0.989,72,1.377,79,0.93,108,2.431,118,2.431,154,2.166,155,2.787,183,2.431,219,2.787,223,2.787,255,2.927,256,3.326]],["title/31",[8,0.011,38,0.528,72,0.993,255,1.562]],["description/31",[3,0.241,8,0.019,10,0.476,28,0.542,38,0.664,45,0.463,53,1.188,72,1.25,78,0.923,79,0.397,86,3.334,87,1.188,89,1.188,92,0.923,93,1.188,94,1.188,105,1.188,107,1.188,108,1.721,115,1.533,118,1.036,128,1.721,142,1.972,145,1.036,183,1.036,190,1.188,194,1.188,203,1.036,227,1.188,255,2.539,257,1.418,258,1.418,259,3.514,260,1.418,261,1.418,262,1.418,263,1.418,264,1.418,265,1.418,266,2.354,267,1.418,268,1.418,269,1.418,270,1.418,271,1.418,272,1.418,273,1.418,274,1.418,275,1.418,276,1.418,277,1.418,278,1.418,279,1.418,280,1.418,281,1.418]],["title/32",[111,1.768,199,1.944]],["description/32",[0,2.169,8,0.017,47,2.698,63,1.973,111,1.973,113,2.404,172,3.093,199,2.169,229,3.093,282,3.691,283,3.691,284,3.691,285,3.691,286,3.691]],["title/33",[111,1.768,199,1.944]],["description/33",[80,2.19,111,2.394,199,2.631,287,4.478,288,4.478,289,4.478]]],"invertedIndex":[["",{"_index":86,"title":{"17":{}},"description":{"6":{},"12":{},"31":{}}}],["0",{"_index":272,"title":{},"description":{"31":{}}}],["1",{"_index":271,"title":{},"description":{"31":{}}}],["2",{"_index":201,"title":{},"description":{"13":{}}}],["5000",{"_index":43,"title":{},"description":{"2":{}}}],["accept",{"_index":118,"title":{},"description":{"8":{},"30":{},"31":{}}}],["accord",{"_index":196,"title":{},"description":{"13":{}}}],["ad",{"_index":157,"title":{},"description":{"12":{}}}],["add",{"_index":242,"title":{"25":{}},"description":{"25":{}}}],["addit",{"_index":165,"title":{},"description":{"12":{}}}],["advanc",{"_index":106,"title":{},"description":{"6":{}}}],["allow",{"_index":186,"title":{},"description":{"12":{},"17":{}}}],["api",{"_index":5,"title":{"0":{},"1":{}},"description":{"0":{},"1":{},"2":{},"3":{},"13":{},"14":{}}}],["api/v1",{"_index":39,"title":{},"description":{"2":{}}}],["appli",{"_index":183,"title":{},"description":{"12":{},"30":{},"31":{}}}],["applic",{"_index":191,"title":{},"description":{"12":{}}}],["argument",{"_index":129,"title":{},"description":{"11":{},"13":{}}}],["array",{"_index":94,"title":{},"description":{"6":{},"31":{}}}],["assign",{"_index":263,"title":{},"description":{"31":{}}}],["associ",{"_index":207,"title":{},"description":{"15":{}}}],["authent",{"_index":52,"title":{"3":{}},"description":{"3":{}}}],["automat",{"_index":33,"title":{},"description":{"1":{},"30":{}}}],["avail",{"_index":82,"title":{},"description":{"5":{},"11":{},"18":{}}}],["base",{"_index":48,"title":{},"description":{"2":{}}}],["basic",{"_index":83,"title":{},"description":{"5":{}}}],["be",{"_index":70,"title":{},"description":{"4":{}}}],["below",{"_index":15,"title":{},"description":{"0":{}}}],["between",{"_index":133,"title":{"12":{}},"description":{"12":{}}}],["bodi",{"_index":107,"title":{},"description":{"6":{},"31":{}}}],["boolean",{"_index":269,"title":{},"description":{"31":{}}}],["browser_step",{"_index":109,"title":{},"description":{"6":{}}}],["built",{"_index":12,"title":{},"description":{"0":{}}}],["bulk",{"_index":219,"title":{},"description":{"17":{},"30":{}}}],["categor",{"_index":216,"title":{},"description":{"17":{}}}],["certain",{"_index":253,"title":{},"description":{"28":{}}}],["chang",{"_index":71,"title":{},"description":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"14":{},"16":{},"17":{},"20":{},"22":{},"29":{}}}],["changedetection.io",{"_index":0,"title":{"0":{}},"description":{"0":{},"1":{},"2":{},"32":{}}}],["check",{"_index":73,"title":{},"description":{"4":{},"6":{},"13":{}}}],["chosen",{"_index":141,"title":{},"description":{"12":{}}}],["click",{"_index":32,"title":{},"description":{"1":{}}}],["clipboard",{"_index":35,"title":{},"description":{"1":{}}}],["collect",{"_index":251,"title":{},"description":{"28":{}}}],["color",{"_index":162,"title":{},"description":{"12":{}}}],["coloris",{"_index":189,"title":{},"description":{"12":{}}}],["comma-separ",{"_index":274,"title":{},"description":{"31":{}}}],["command",{"_index":18,"title":{},"description":{"0":{}}}],["compar",{"_index":138,"title":{},"description":{"12":{}}}],["comparison",{"_index":136,"title":{},"description":{"12":{}}}],["concis",{"_index":81,"title":{},"description":{"5":{}}}],["configur",{"_index":72,"title":{"31":{}},"description":{"4":{},"6":{},"23":{},"24":{},"25":{},"27":{},"30":{},"31":{}}}],["connect",{"_index":37,"title":{"2":{}},"description":{}}],["content",{"_index":76,"title":{},"description":{"4":{},"12":{},"13":{}}}],["convers",{"_index":268,"title":{},"description":{"31":{}}}],["copi",{"_index":34,"title":{},"description":{"1":{}}}],["core",{"_index":60,"title":{},"description":{"4":{}}}],["count",{"_index":285,"title":{},"description":{"32":{}}}],["creat",{"_index":62,"title":{"6":{},"19":{}},"description":{"4":{},"6":{},"19":{}}}],["criteria",{"_index":254,"title":{},"description":{"28":{}}}],["curl",{"_index":17,"title":{},"description":{"0":{}}}],["current",{"_index":287,"title":{},"description":{"33":{}}}],["custom",{"_index":188,"title":{},"description":{"12":{}}}],["dashboard",{"_index":30,"title":{},"description":{"1":{},"15":{}}}],["dedup",{"_index":264,"title":{},"description":{"31":{}}}],["default",{"_index":92,"title":{},"description":{"6":{},"12":{},"23":{},"31":{}}}],["delet",{"_index":65,"title":{"9":{},"22":{},"27":{}},"description":{"4":{},"9":{},"12":{},"22":{},"27":{}}}],["detail",{"_index":172,"title":{},"description":{"12":{},"32":{}}}],["detect",{"_index":125,"title":{},"description":{"10":{}}}],["dif",{"_index":168,"title":{},"description":{"12":{}}}],["diff",{"_index":179,"title":{},"description":{"12":{}}}],["differ",{"_index":132,"title":{"12":{}},"description":{"12":{},"15":{}}}],["disabl",{"_index":174,"title":{},"description":{"12":{}}}],["discord",{"_index":231,"title":{},"description":{"23":{}}}],["display",{"_index":211,"title":{},"description":{"16":{}}}],["driven",{"_index":11,"title":{},"description":{"0":{}}}],["duplic",{"_index":265,"title":{},"description":{"31":{}}}],["each",{"_index":67,"title":{},"description":{"4":{}}}],["easili",{"_index":25,"title":{},"description":{"1":{}}}],["email",{"_index":230,"title":{},"description":{"23":{}}}],["empti",{"_index":245,"title":{},"description":{"26":{}}}],["enabl",{"_index":169,"title":{},"description":{"12":{}}}],["endpoint",{"_index":137,"title":{},"description":{"12":{},"13":{},"23":{}}}],["etc",{"_index":194,"title":{},"description":{"12":{},"31":{}}}],["exampl",{"_index":14,"title":{},"description":{"0":{},"2":{},"3":{}}}],["exist",{"_index":117,"title":{},"description":{"8":{},"21":{}}}],["fals",{"_index":270,"title":{},"description":{"31":{}}}],["false/off",{"_index":177,"title":{},"description":{"12":{}}}],["faster",{"_index":23,"title":{},"description":{"0":{}}}],["favicon",{"_index":205,"title":{"15":{},"16":{}},"description":{"15":{},"16":{}}}],["fetch",{"_index":130,"title":{},"description":{"11":{},"13":{}}}],["fetch_backend",{"_index":105,"title":{},"description":{"6":{},"31":{}}}],["field",{"_index":89,"title":{},"description":{"6":{},"31":{}}}],["file",{"_index":202,"title":{},"description":{"13":{}}}],["filter",{"_index":77,"title":{},"description":{"4":{},"28":{}}}],["find",{"_index":16,"title":{"1":{}},"description":{"0":{},"1":{},"28":{}}}],["float",{"_index":281,"title":{},"description":{"31":{}}}],["format",{"_index":142,"title":{},"description":{"12":{},"31":{}}}],["found",{"_index":26,"title":{},"description":{"1":{},"2":{}}}],["from_timestamp",{"_index":152,"title":{},"description":{"12":{}}}],["full",{"_index":114,"title":{},"description":{"7":{}}}],["function",{"_index":61,"title":{},"description":{"4":{}}}],["gener",{"_index":135,"title":{},"description":{"12":{}}}],["global",{"_index":226,"title":{},"description":{"23":{}}}],["granular",{"_index":170,"title":{},"description":{"12":{}}}],["green",{"_index":164,"title":{},"description":{"12":{}}}],["group",{"_index":9,"title":{"17":{}},"description":{"0":{},"17":{}}}],["group-wid",{"_index":217,"title":{},"description":{"17":{}}}],["header",{"_index":56,"title":{},"description":{"3":{},"6":{}}}],["help",{"_index":21,"title":{},"description":{"0":{}}}],["highlight",{"_index":163,"title":{},"description":{"12":{}}}],["histor",{"_index":126,"title":{},"description":{"11":{},"12":{}}}],["histori",{"_index":123,"title":{"10":{},"11":{}},"description":{"9":{},"11":{},"12":{},"13":{},"14":{}}}],["hosted/subscript",{"_index":46,"title":{},"description":{"2":{}}}],["html",{"_index":159,"title":{},"description":{"12":{},"13":{}}}],["htmlcolor",{"_index":160,"title":{},"description":{"12":{}}}],["http",{"_index":57,"title":{},"description":{"3":{}}}],["http://localhost:5000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/histori",{"_index":44,"title":{},"description":{"2":{}}}],["https://<your",{"_index":50,"title":{},"description":{"2":{}}}],["https://github.com/caronc/apprise](https://github.com/caronc/appris",{"_index":241,"title":{},"description":{"23":{}}}],["identifi",{"_index":210,"title":{},"description":{"15":{},"28":{}}}],["imag",{"_index":206,"title":{},"description":{"15":{}}}],["implement",{"_index":187,"title":{},"description":{"12":{}}}],["import",{"_index":255,"title":{"30":{},"31":{}},"description":{"30":{},"31":{}}}],["includ",{"_index":229,"title":{},"description":{"23":{},"32":{}}}],["individu",{"_index":66,"title":{},"description":{"4":{},"13":{},"23":{}}}],["info",{"_index":84,"title":{},"description":{"5":{}}}],["inform",{"_index":111,"title":{"32":{},"33":{}},"description":{"7":{},"20":{},"32":{},"33":{}}}],["information](#operation/getwatch",{"_index":121,"title":{},"description":{"8":{}}}],["inlin",{"_index":173,"title":{},"description":{"12":{}}}],["instanc",{"_index":283,"title":{},"description":{"32":{}}}],["int",{"_index":280,"title":{},"description":{"31":{}}}],["interfac",{"_index":208,"title":{},"description":{"15":{}}}],["interv",{"_index":74,"title":{},"description":{"4":{}}}],["item1,item2",{"_index":275,"title":{},"description":{"31":{}}}],["json",{"_index":115,"title":{},"description":{"7":{},"8":{},"21":{},"31":{}}}],["keep",{"_index":200,"title":{},"description":{"13":{}}}],["key",{"_index":24,"title":{"1":{}},"description":{"1":{},"3":{},"11":{}}}],["key\":\"valu",{"_index":277,"title":{},"description":{"31":{}}}],["key](./where-to-get-api-key.jpeg",{"_index":36,"title":{},"description":{"1":{}}}],["keyword",{"_index":147,"title":{},"description":{"12":{}}}],["known",{"_index":215,"title":{},"description":{"17":{}}}],["larg",{"_index":250,"title":{},"description":{"28":{}}}],["last",{"_index":198,"title":{},"description":{"13":{}}}],["latest",{"_index":148,"title":{},"description":{"12":{},"14":{}}}],["level",{"_index":239,"title":{},"description":{"23":{}}}],["line",{"_index":19,"title":{},"description":{"0":{}}}],["line-level",{"_index":176,"title":{},"description":{"12":{}}}],["line-separ",{"_index":257,"title":{},"description":{"31":{}}}],["list",{"_index":79,"title":{"5":{},"18":{}},"description":{"5":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"18":{},"24":{},"26":{},"30":{},"31":{}}}],["local",{"_index":41,"title":{},"description":{"2":{}}}],["login",{"_index":49,"title":{},"description":{"2":{}}}],["manag",{"_index":7,"title":{"4":{},"17":{}},"description":{"0":{},"4":{}}}],["mani",{"_index":234,"title":{},"description":{"23":{}}}],["mass",{"_index":221,"title":{},"description":{"17":{}}}],["match",{"_index":252,"title":{},"description":{"28":{}}}],["method",{"_index":104,"title":{},"description":{"6":{}}}],["mode",{"_index":88,"title":{},"description":{"6":{},"12":{}}}],["monitor",{"_index":3,"title":{"0":{}},"description":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"20":{},"22":{},"28":{},"29":{},"30":{},"31":{}}}],["more",{"_index":110,"title":{},"description":{"6":{},"25":{},"27":{}}}],["multipl",{"_index":223,"title":{},"description":{"17":{},"30":{}}}],["muted/paus",{"_index":112,"title":{},"description":{"7":{}}}],["new",{"_index":85,"title":{"6":{}},"description":{}}],["no_markup=tru",{"_index":181,"title":{},"description":{"12":{}}}],["notif",{"_index":4,"title":{"0":{},"23":{},"24":{},"25":{},"26":{},"27":{}},"description":{"0":{},"4":{},"6":{},"17":{},"23":{},"24":{},"25":{},"26":{},"27":{}}}],["notification_bodi",{"_index":96,"title":{},"description":{"6":{}}}],["notification_format",{"_index":97,"title":{},"description":{"6":{}}}],["notification_mut",{"_index":98,"title":{},"description":{"6":{},"20":{}}}],["notification_titl",{"_index":95,"title":{},"description":{"6":{}}}],["notification_url",{"_index":93,"title":{},"description":{"6":{},"31":{}}}],["number",{"_index":278,"title":{},"description":{"31":{}}}],["object",{"_index":276,"title":{},"description":{"31":{}}}],["on",{"_index":243,"title":{},"description":{"25":{},"27":{}}}],["opening/clos",{"_index":185,"title":{},"description":{"12":{}}}],["oper",{"_index":220,"title":{},"description":{"17":{}}}],["option",{"_index":78,"title":{},"description":{"4":{},"6":{},"12":{},"31":{}}}],["organ",{"_index":214,"title":{},"description":{"17":{}}}],["output",{"_index":180,"title":{},"description":{"12":{}}}],["overridden",{"_index":238,"title":{},"description":{"23":{}}}],["overview",{"_index":212,"title":{},"description":{"16":{}}}],["page",{"_index":2,"title":{"0":{}},"description":{"0":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"20":{},"22":{},"29":{}}}],["paramet",{"_index":259,"title":{},"description":{"31":{}}}],["pars",{"_index":279,"title":{},"description":{"31":{}}}],["pass",{"_index":203,"title":{},"description":{"13":{},"14":{},"31":{}}}],["pattern",{"_index":247,"title":{},"description":{"28":{}}}],["paus",{"_index":103,"title":{},"description":{"6":{}}}],["perfect",{"_index":143,"title":{},"description":{"12":{}}}],["perform",{"_index":218,"title":{},"description":{"17":{}}}],["placehold",{"_index":184,"title":{},"description":{"12":{}}}],["plain",{"_index":155,"title":{},"description":{"12":{},"30":{}}}],["platform",{"_index":236,"title":{},"description":{"23":{}}}],["point",{"_index":139,"title":{},"description":{"12":{}}}],["popular",{"_index":235,"title":{},"description":{"23":{}}}],["port",{"_index":42,"title":{},"description":{"2":{}}}],["prefer",{"_index":75,"title":{},"description":{"4":{},"17":{}}}],["prefix",{"_index":158,"title":{},"description":{"12":{}}}],["previou",{"_index":150,"title":{},"description":{"12":{}}}],["processor",{"_index":87,"title":{},"description":{"6":{},"31":{}}}],["provid",{"_index":55,"title":{},"description":{"3":{},"26":{}}}],["proxi",{"_index":108,"title":{},"description":{"6":{},"30":{},"31":{}}}],["python",{"_index":20,"title":{},"description":{"0":{}}}],["queri",{"_index":128,"title":{},"description":{"11":{},"13":{},"31":{}}}],["quickli",{"_index":249,"title":{},"description":{"28":{}}}],["raw",{"_index":178,"title":{},"description":{"12":{}}}],["recent",{"_index":146,"title":{},"description":{"12":{},"14":{}}}],["recheck",{"_index":222,"title":{},"description":{"17":{},"20":{}}}],["red",{"_index":166,"title":{},"description":{"12":{}}}],["relat",{"_index":122,"title":{},"description":{"9":{},"17":{}}}],["remov",{"_index":156,"title":{},"description":{"12":{},"22":{}}}],["replac",{"_index":244,"title":{"26":{}},"description":{"26":{}}}],["repres",{"_index":68,"title":{},"description":{"4":{}}}],["request",{"_index":53,"title":{},"description":{"3":{},"31":{}}}],["requir",{"_index":54,"title":{},"description":{"3":{},"6":{}}}],["rest",{"_index":6,"title":{},"description":{"0":{}}}],["restock_diff",{"_index":90,"title":{},"description":{"6":{}}}],["retriev",{"_index":63,"title":{},"description":{"4":{},"7":{},"13":{},"15":{},"20":{},"32":{}}}],["return",{"_index":80,"title":{},"description":{"5":{},"7":{},"8":{},"12":{},"18":{},"24":{},"33":{}}}],["review",{"_index":144,"title":{},"description":{"12":{}}}],["rich",{"_index":161,"title":{},"description":{"12":{}}}],["run",{"_index":40,"title":{},"description":{"2":{}}}],["same",{"_index":119,"title":{},"description":{"8":{}}}],["schema",{"_index":260,"title":{},"description":{"31":{}}}],["search",{"_index":246,"title":{"28":{},"29":{}},"description":{"28":{},"29":{}}}],["second-most-rec",{"_index":151,"title":{},"description":{"12":{}}}],["serv",{"_index":237,"title":{},"description":{"23":{}}}],["servic",{"_index":192,"title":{},"description":{"12":{},"23":{}}}],["set",{"_index":28,"title":{},"description":{"1":{},"4":{},"6":{},"7":{},"13":{},"17":{},"20":{},"23":{},"30":{},"31":{}}}],["simpl",{"_index":13,"title":{},"description":{"0":{}}}],["simpli",{"_index":31,"title":{},"description":{"1":{}}}],["simultan",{"_index":256,"title":{},"description":{"30":{}}}],["singl",{"_index":69,"title":{"7":{},"14":{},"20":{}},"description":{"4":{},"6":{},"8":{},"11":{},"14":{},"19":{}}}],["skip",{"_index":190,"title":{},"description":{"12":{},"31":{}}}],["slack",{"_index":232,"title":{},"description":{"23":{}}}],["snapshot",{"_index":127,"title":{"12":{},"13":{},"14":{}},"description":{"11":{},"12":{},"13":{},"14":{}}}],["special",{"_index":261,"title":{},"description":{"31":{}}}],["specif",{"_index":145,"title":{},"description":{"12":{},"28":{},"31":{}}}],["start",{"_index":22,"title":{},"description":{"0":{}}}],["state",{"_index":288,"title":{},"description":{"33":{}}}],["statist",{"_index":282,"title":{},"description":{"32":{}}}],["statu",{"_index":113,"title":{},"description":{"7":{},"17":{},"20":{},"32":{}}}],["string",{"_index":101,"title":{},"description":{"6":{}}}],["structur",{"_index":120,"title":{},"description":{"8":{}}}],["support",{"_index":227,"title":{},"description":{"23":{},"31":{}}}],["syntax",{"_index":240,"title":{},"description":{"23":{}}}],["system",{"_index":199,"title":{"32":{},"33":{}},"description":{"13":{},"32":{},"33":{}}}],["systeminfo",{"_index":289,"title":{},"description":{"33":{}}}],["tab",{"_index":29,"title":{},"description":{"1":{}}}],["tag",{"_index":10,"title":{"17":{},"18":{},"19":{},"20":{},"21":{},"22":{}},"description":{"0":{},"6":{},"12":{},"17":{},"18":{},"19":{},"20":{},"21":{},"23":{},"28":{},"30":{},"31":{}}}],["tag/group",{"_index":224,"title":{},"description":{"19":{},"22":{}}}],["tag/{uuid",{"_index":225,"title":{},"description":{"20":{},"21":{},"22":{}}}],["tag_uuid",{"_index":262,"title":{},"description":{"31":{}}}],["tags/group",{"_index":99,"title":{},"description":{"6":{},"18":{}}}],["text",{"_index":154,"title":{},"description":{"12":{},"13":{},"29":{},"30":{}}}],["text_json_diff",{"_index":91,"title":{},"description":{"6":{}}}],["time",{"_index":140,"title":{},"description":{"12":{},"13":{}}}],["time_between_check",{"_index":102,"title":{},"description":{"6":{}}}],["timestamp",{"_index":124,"title":{},"description":{"10":{},"11":{},"12":{},"13":{},"14":{}}}],["titl",{"_index":248,"title":{},"description":{"28":{},"29":{}}}],["to_timestamp",{"_index":149,"title":{},"description":{"12":{}}}],["total",{"_index":284,"title":{},"description":{"32":{}}}],["true",{"_index":266,"title":{},"description":{"31":{}}}],["tweak",{"_index":193,"title":{},"description":{"12":{}}}],["two",{"_index":134,"title":{"12":{}},"description":{"12":{},"13":{}}}],["type",{"_index":267,"title":{},"description":{"31":{}}}],["under",{"_index":27,"title":{},"description":{"1":{}}}],["unix",{"_index":153,"title":{},"description":{"12":{}}}],["updat",{"_index":64,"title":{"8":{},"21":{}},"description":{"4":{},"8":{},"21":{}}}],["uptim",{"_index":286,"title":{},"description":{"32":{}}}],["url",{"_index":38,"title":{"2":{},"24":{},"25":{},"26":{},"27":{},"31":{}},"description":{"2":{},"4":{},"6":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{}}}],["url>/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/histori",{"_index":51,"title":{},"description":{"2":{}}}],["us",{"_index":45,"title":{},"description":{"2":{},"8":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"21":{},"23":{},"28":{},"31":{}}}],["uuid",{"_index":100,"title":{},"description":{"6":{}}}],["valu",{"_index":197,"title":{},"description":{"13":{}}}],["variou",{"_index":228,"title":{},"description":{"23":{}}}],["version",{"_index":47,"title":{},"description":{"2":{},"12":{},"32":{}}}],["via",{"_index":258,"title":{},"description":{"31":{}}}],["visual",{"_index":209,"title":{},"description":{"15":{}}}],["watch",{"_index":8,"title":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"16":{},"29":{},"31":{}},"description":{"0":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"20":{},"22":{},"23":{},"28":{},"29":{},"30":{},"31":{},"32":{}}}],["watch/{uuid",{"_index":116,"title":{},"description":{"7":{},"8":{},"9":{}}}],["watch/{uuid}/difference/{from_timestamp}/{to_timestamp",{"_index":195,"title":{},"description":{"12":{}}}],["watch/{uuid}/favicon",{"_index":213,"title":{},"description":{"16":{}}}],["watch/{uuid}/histori",{"_index":131,"title":{},"description":{"11":{}}}],["watch/{uuid}/history/{timestamp",{"_index":204,"title":{},"description":{"14":{}}}],["web",{"_index":1,"title":{"0":{}},"description":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"14":{},"15":{},"16":{},"20":{},"22":{},"29":{}}}],["webhook",{"_index":233,"title":{},"description":{"23":{}}}],["without",{"_index":182,"title":{},"description":{"12":{}}}],["word-level",{"_index":167,"title":{},"description":{"12":{}}}],["word_diff=fals",{"_index":175,"title":{},"description":{"12":{}}}],["word_diff=tru",{"_index":171,"title":{},"description":{"12":{}}}],["x-api-key",{"_index":58,"title":{},"description":{"3":{}}}],["ye",{"_index":273,"title":{},"description":{"31":{}}}],["your_api_key",{"_index":59,"title":{},"description":{"3":{}}}]],"pipeline":[]}},"options":{}}; var container = document.getElementById('redoc'); Redoc.hydrate(__redoc_state, container); diff --git a/requirements.txt b/requirements.txt index 17f245497..e87c93908 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,6 @@ flask-compress # 0.6.3 included compatibility fix for werkzeug 3.x (2.x had deprecation of url handlers) flask-login>=0.6.3 flask-paginate -flask_expects_json~=1.7 flask_restful flask_cors # For the Chrome extension to operate # janus # No longer needed - using pure threading.Queue for multi-loop support @@ -126,8 +125,8 @@ greenlet >= 3.0.3 # Default SOCKETIO_MODE=threading is recommended for better compatibility gevent -# Pinned or it causes problems with flask_expects_json which seems unmaintained -referencing==0.35.1 +# Previously pinned for flask_expects_json (removed 2026-02). Unpinning for now. +referencing # For conditions panzi-json-logic