{"id":8739,"date":"2025-04-08T11:43:39","date_gmt":"2025-04-08T11:43:39","guid":{"rendered":"https:\/\/pariswells.com\/blog\/?p=8739"},"modified":"2025-04-08T11:43:50","modified_gmt":"2025-04-08T11:43:50","slug":"how-to-update-changedetection-api-via-python","status":"publish","type":"post","link":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python","title":{"rendered":"How to update changedetection API via Python"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import requests\nimport os\nfrom dotenv import load_dotenv\nimport json\nfrom typing import Dict, Any\nimport time\n\n# Load environment variables\nload_dotenv()\n\nclass ChangeDetectionAPI:\n    def __init__(self):\n        self.base_url = os.getenv('CHANGEDETECTION_BASE_URL', 'https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api')\n        self.api_key = os.getenv('CHANGEDETECTION_API_KEY')\n        if not self.api_key:\n            raise ValueError(\"API key not found in environment variables\")\n        \n        print(f\"Using base URL: {self.base_url}\")\n        print(f\"Using API key: {self.api_key[:4]}...{self.api_key[-4:]}\")\n        \n        self.headers = {\n            \"x-api-key\": self.api_key,\n            \"Content-Type\": \"application\/json\"\n        }\n\n    def create_watcher(self, url: str, tag: str, title: str = None) -> Dict[str, Any]:\n        \"\"\"Create a new watcher with retry mechanism\"\"\"\n        endpoint = f\"{self.base_url}\/v1\/watch\"  # Use v1 endpoint as per example\n        print(f\"Creating watcher at endpoint: {endpoint}\")\n        \n        # Simplified payload based on example\n        payload = {\n            \"url\": url,\n            \"tag\": tag\n        }\n        \n        # Add title if provided\n        if title:\n            payload[\"title\"] = title\n\n        print(f\"Request payload: {json.dumps(payload, indent=2)}\")\n        print(f\"Request headers: {json.dumps(self.headers, indent=2)}\")\n\n        max_retries = 3\n        retry_delay = 5  # seconds\n\n        for attempt in range(max_retries):\n            try:\n                response = requests.post(endpoint, json=payload, headers=self.headers)\n                print(f\"Response status: {response.status_code}\")\n                print(f\"Response headers: {json.dumps(dict(response.headers), indent=2)}\")\n                if response.text:\n                    print(f\"Response body: {response.text}\")\n                response.raise_for_status()\n                return response.json()\n            except requests.exceptions.RequestException as e:\n                if attempt == max_retries - 1:\n                    raise Exception(f\"Failed to create watcher after {max_retries} attempts: {str(e)}\")\n                print(f\"Attempt {attempt + 1} failed, retrying in {retry_delay} seconds...\")\n                time.sleep(retry_delay)\n\n    def get_watcher_status(self, watcher_id: str) -> Dict[str, Any]:\n        \"\"\"Get the status of an existing watcher\"\"\"\n        endpoint = f\"{self.base_url}\/v1\/watch\/{watcher_id}\"\n        response = requests.get(endpoint, headers=self.headers)\n        response.raise_for_status()\n        return response.json()\n\n    def delete_watcher(self, watcher_id: str) -> bool:\n        \"\"\"Delete an existing watcher\"\"\"\n        endpoint = f\"{self.base_url}\/v1\/watch\/{watcher_id}\"\n        response = requests.delete(endpoint, headers=self.headers)\n        return response.status_code == 200\n\ndef main():\n    try:\n        # Initialize API client\n        api = ChangeDetectionAPI()\n\n        # Example usage\n        domain_url = \"https:\/\/www.google.com\"\n        \n        # Create watcher with minimal required fields\n        result = api.create_watcher(\n            url=domain_url,\n            tag=\"stock\",\n            title=\"Title\"\n        )\n        \n        print(\"Watcher created successfully:\", json.dumps(result, indent=2))\n        \n        # Get watcher status\n        if 'uuid' in result:\n            status = api.get_watcher_status(result['uuid'])\n            print(\"Watcher status:\", json.dumps(status, indent=2))\n\n    except Exception as e:\n        print(f\"Error: {str(e)}\")\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8739","post","type-post","status-publish","format-standard","hentry","category-research"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv(&#039;CHANGEDETECTION_BASE_URL&#039;, &#039;https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api&#039;) self.api_key = os.getenv(&#039;CHANGEDETECTION_API_KEY&#039;) if not self.api_key: raise ValueError(&quot;API key not found in environment variables&quot;) print(f&quot;Using base URL: {self.base_url}&quot;) print(f&quot;Using API key: {self.api_key[:4]}...{self.api_key[-4:]}&quot;) self.headers = {\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"paris\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Welcome to Pariswells.com |\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"How to update changedetection API via Python | Welcome to Pariswells.com\" \/>\n\t\t<meta property=\"og:description\" content=\"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv(&#039;CHANGEDETECTION_BASE_URL&#039;, &#039;https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api&#039;) self.api_key = os.getenv(&#039;CHANGEDETECTION_API_KEY&#039;) if not self.api_key: raise ValueError(&quot;API key not found in environment variables&quot;) print(f&quot;Using base URL: {self.base_url}&quot;) print(f&quot;Using API key: {self.api_key[:4]}...{self.api_key[-4:]}&quot;) self.headers = {\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-04-08T11:43:39+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-04-08T11:43:50+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"How to update changedetection API via Python | Welcome to Pariswells.com\" \/>\n\t\t<meta name=\"twitter:description\" content=\"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv(&#039;CHANGEDETECTION_BASE_URL&#039;, &#039;https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api&#039;) self.api_key = os.getenv(&#039;CHANGEDETECTION_API_KEY&#039;) if not self.api_key: raise ValueError(&quot;API key not found in environment variables&quot;) print(f&quot;Using base URL: {self.base_url}&quot;) print(f&quot;Using API key: {self.api_key[:4]}...{self.api_key[-4:]}&quot;) self.headers = {\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#article\",\"name\":\"How to update changedetection API via Python | Welcome to Pariswells.com\",\"headline\":\"How to update changedetection API via Python\",\"author\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/author\\\/paris#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/#organization\"},\"datePublished\":\"2025-04-08T11:43:39+00:00\",\"dateModified\":\"2025-04-08T11:43:50+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#webpage\"},\"articleSection\":\"Research\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/pariswells.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/category\\\/research#listItem\",\"name\":\"Research\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/category\\\/research#listItem\",\"position\":2,\"name\":\"Research\",\"item\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/category\\\/research\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#listItem\",\"name\":\"How to update changedetection API via Python\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#listItem\",\"position\":3,\"name\":\"How to update changedetection API via Python\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/category\\\/research#listItem\",\"name\":\"Research\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/#organization\",\"name\":\"Welcome to Pariswells.com\",\"url\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/author\\\/paris#author\",\"url\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/author\\\/paris\",\"name\":\"paris\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/93b8ee3f592ac401167f870452bd82d43de80152cd3524e2853403658ada9984?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"paris\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#webpage\",\"url\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python\",\"name\":\"How to update changedetection API via Python | Welcome to Pariswells.com\",\"description\":\"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv('CHANGEDETECTION_BASE_URL', 'https:\\\/\\\/lemonade.changedetection.io\\\/XXXXXXXX\\\/api') self.api_key = os.getenv('CHANGEDETECTION_API_KEY') if not self.api_key: raise ValueError(\\\"API key not found in environment variables\\\") print(f\\\"Using base URL: {self.base_url}\\\") print(f\\\"Using API key: {self.api_key[:4]}...{self.api_key[-4:]}\\\") self.headers = {\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/research\\\/how-to-update-changedetection-api-via-python#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/author\\\/paris#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/author\\\/paris#author\"},\"datePublished\":\"2025-04-08T11:43:39+00:00\",\"dateModified\":\"2025-04-08T11:43:50+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/\",\"name\":\"Welcome to Pariswells.com\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/pariswells.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"How to update changedetection API via Python | Welcome to Pariswells.com","description":"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv('CHANGEDETECTION_BASE_URL', 'https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api') self.api_key = os.getenv('CHANGEDETECTION_API_KEY') if not self.api_key: raise ValueError(\"API key not found in environment variables\") print(f\"Using base URL: {self.base_url}\") print(f\"Using API key: {self.api_key[:4]}...{self.api_key[-4:]}\") self.headers = {","canonical_url":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#article","name":"How to update changedetection API via Python | Welcome to Pariswells.com","headline":"How to update changedetection API via Python","author":{"@id":"https:\/\/pariswells.com\/blog\/author\/paris#author"},"publisher":{"@id":"https:\/\/pariswells.com\/blog\/#organization"},"datePublished":"2025-04-08T11:43:39+00:00","dateModified":"2025-04-08T11:43:50+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#webpage"},"isPartOf":{"@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#webpage"},"articleSection":"Research"},{"@type":"BreadcrumbList","@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/pariswells.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/pariswells.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/pariswells.com\/blog\/category\/research#listItem","name":"Research"}},{"@type":"ListItem","@id":"https:\/\/pariswells.com\/blog\/category\/research#listItem","position":2,"name":"Research","item":"https:\/\/pariswells.com\/blog\/category\/research","nextItem":{"@type":"ListItem","@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#listItem","name":"How to update changedetection API via Python"},"previousItem":{"@type":"ListItem","@id":"https:\/\/pariswells.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#listItem","position":3,"name":"How to update changedetection API via Python","previousItem":{"@type":"ListItem","@id":"https:\/\/pariswells.com\/blog\/category\/research#listItem","name":"Research"}}]},{"@type":"Organization","@id":"https:\/\/pariswells.com\/blog\/#organization","name":"Welcome to Pariswells.com","url":"https:\/\/pariswells.com\/blog\/"},{"@type":"Person","@id":"https:\/\/pariswells.com\/blog\/author\/paris#author","url":"https:\/\/pariswells.com\/blog\/author\/paris","name":"paris","image":{"@type":"ImageObject","@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/93b8ee3f592ac401167f870452bd82d43de80152cd3524e2853403658ada9984?s=96&d=mm&r=g","width":96,"height":96,"caption":"paris"}},{"@type":"WebPage","@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#webpage","url":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python","name":"How to update changedetection API via Python | Welcome to Pariswells.com","description":"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv('CHANGEDETECTION_BASE_URL', 'https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api') self.api_key = os.getenv('CHANGEDETECTION_API_KEY') if not self.api_key: raise ValueError(\"API key not found in environment variables\") print(f\"Using base URL: {self.base_url}\") print(f\"Using API key: {self.api_key[:4]}...{self.api_key[-4:]}\") self.headers = {","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/pariswells.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python#breadcrumblist"},"author":{"@id":"https:\/\/pariswells.com\/blog\/author\/paris#author"},"creator":{"@id":"https:\/\/pariswells.com\/blog\/author\/paris#author"},"datePublished":"2025-04-08T11:43:39+00:00","dateModified":"2025-04-08T11:43:50+00:00"},{"@type":"WebSite","@id":"https:\/\/pariswells.com\/blog\/#website","url":"https:\/\/pariswells.com\/blog\/","name":"Welcome to Pariswells.com","inLanguage":"en-US","publisher":{"@id":"https:\/\/pariswells.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Welcome to Pariswells.com |","og:type":"article","og:title":"How to update changedetection API via Python | Welcome to Pariswells.com","og:description":"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv('CHANGEDETECTION_BASE_URL', 'https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api') self.api_key = os.getenv('CHANGEDETECTION_API_KEY') if not self.api_key: raise ValueError(&quot;API key not found in environment variables&quot;) print(f&quot;Using base URL: {self.base_url}&quot;) print(f&quot;Using API key: {self.api_key[:4]}...{self.api_key[-4:]}&quot;) self.headers = {","og:url":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python","article:published_time":"2025-04-08T11:43:39+00:00","article:modified_time":"2025-04-08T11:43:50+00:00","twitter:card":"summary","twitter:title":"How to update changedetection API via Python | Welcome to Pariswells.com","twitter:description":"import requests import os from dotenv import load_dotenv import json from typing import Dict, Any import time # Load environment variables load_dotenv() class ChangeDetectionAPI: def __init__(self): self.base_url = os.getenv('CHANGEDETECTION_BASE_URL', 'https:\/\/lemonade.changedetection.io\/XXXXXXXX\/api') self.api_key = os.getenv('CHANGEDETECTION_API_KEY') if not self.api_key: raise ValueError(&quot;API key not found in environment variables&quot;) print(f&quot;Using base URL: {self.base_url}&quot;) print(f&quot;Using API key: {self.api_key[:4]}...{self.api_key[-4:]}&quot;) self.headers = {"},"aioseo_meta_data":{"post_id":"8739","title":null,"description":null,"keywords":null,"keyphrases":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2025-12-10 00:13:24","updated":"2025-12-10 00:13:24","primary_term":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/pariswells.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/pariswells.com\/blog\/category\/research\" title=\"Research\">Research<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tHow to update changedetection API via Python\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/pariswells.com\/blog"},{"label":"Research","link":"https:\/\/pariswells.com\/blog\/category\/research"},{"label":"How to update changedetection API via Python","link":"https:\/\/pariswells.com\/blog\/research\/how-to-update-changedetection-api-via-python"}],"_links":{"self":[{"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/posts\/8739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/comments?post=8739"}],"version-history":[{"count":2,"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/posts\/8739\/revisions"}],"predecessor-version":[{"id":8741,"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/posts\/8739\/revisions\/8741"}],"wp:attachment":[{"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/media?parent=8739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/categories?post=8739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pariswells.com\/blog\/wp-json\/wp\/v2\/tags?post=8739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}