MENU navbar-image

Introduction

This documentation aims to provide you with all the information you need to integrate WebChange Detector into your workflow.

Our Quick Start Guide gives you a quick overview to help you with the integration.

If you need help with the integration or miss something here, don\'t hesitate to contact us at: support@webchangedetector.com. We are happy to help.',

Quick Start Guide

WebChange Detector categorizes URLs into groups. The visual regression tests are conducted by processing these groups, including all their settings.

A group can represent a website, for instance, with URLs within that group having settings to enable checks for desktop and/or mobile screen sizes.

This quick start guide will show you how to perform a basic setup, do manual checks of a website, and initiate monitoring for a group, all using default settings. For more detailed customizations, refer to the documentation.

Initial Setup

Get API Token

Create a free trial account at webchangedetector.com. After account activation, get the API token from the dashboard at API & WP Websites.

Create URLs

POST /api/v2/urls

Add all URLs you might want to check. That’s all you need to do for this step.

Create Group

POST /api/v2/

Create a new group to which you'll add your URLs in the next step.

Add URLs to Group

POST /api/v2/groups/{uuid}/add-urls

Assign your URLs to the group. By default, checks for both desktop and mobile are enabled.

Create Webhook(s)

POST /api/v2/webhooks

Create a queue_finished webhook to receive notifications when screenshots and checks are complete. Create a comparison_status_new webhook to be notified about detected changes in checks.

Manual Checks

The manual checks are performed in six steps, with an optional seventh step:

  1. Take pre-update screenshots

    Use POST /api/v2/screenshots/take. Send the parameter sc_type = "pre" and the group_ids for which you want to take the screenshots.

  2. Wait for screenshots to finish

    Wait for the queue_finished webhook to arrive.

  3. Install updates

    Once the pre-update screenshots are done, perform your updates.

  4. Take post-update screenshots

    Use POST /api/v2/screenshots/take. This step is similar to Step 1, but you need to send the parameter sc_type = "post".

  5. Wait for screenshots to finish

    Wait for the queue_finished webhook to arrive. As soon as a change is detected, you will receive the comparison_status_new webhook.

  6. Check the differences

    Use GET /api/v2/comparisons. Retrieve all checks with differences and visually review the changes using the public link.

(7. Optional: Check again after Fixes)

If you've made corrections on your website, you can verify your changes by starting again from step 4. This will create new checks which compare to the pre-update screenshots.

That's all. You can now review all your differences and make corrections on your website if something is broken, or you can rollback the updates.

Monitoring

To commence monitoring, follow the setup steps and set the monitoring parameter to true. All URLs enabled in the group will henceforth be monitored.

Webooks Verification

All of our webhook requests are signed with a SHA256 HMAC. You can find this signature in the Signature HTTP header. The webhook secret used to sign the requests can be retrieved in the GET /accounts call.

### Example Code
$signature = hash_hmac('sha256', $payloadJson, $secret);

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token on webchangedetector.com or via the plugin.

Account

This object represents your account with WCD

Get Account

requires authentication

Retrieves your Account. The fields plan, plan_name, company and magic_login_secret only come for full accounts (not sub accounts).

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/account';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/account" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/account"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/account'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "041c6528-783f-4e7e-b831-1a424ffeb8f3",
        "name_first": "Hans",
        "name_last": "Hacker",
        "email": "mail@example.com",
        "plan": "agency",
        "plan_name": "Agency",
        "company": "ACME Ltd",
        "webhook_secret": "zq3csqdst0txgo5qe9mkqsourrxo56wd",
        "magic_login_secret": "WdKnLLcsDxpJdfmv",
        "is_subaccount": false,
        "checks_done": 6982,
        "checks_left": 3018,
        "checks_limit": 10000,
        "timezone": "UTC",
        "status": "active",
        "renewal_at": "2025-01-01 13:37:42"
    }
}
 

Request   

GET api/v2/account

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Update Account

requires authentication

Updates your Account by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/account';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name_first' => 'Jane',
            'name_last' => 'Doe',
            'company' => 'ACME LLC',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/account" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name_first\": \"Jane\",
    \"name_last\": \"Doe\",
    \"company\": \"ACME LLC\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/account"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name_first": "Jane",
    "name_last": "Doe",
    "company": "ACME LLC"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/account'
payload = {
    "name_first": "Jane",
    "name_last": "Doe",
    "company": "ACME LLC"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "041c6528-783f-4e7e-b831-1a424ffeb8f3",
        "name_first": "Jane",
        "name_last": "Doe",
        "email": "mail@example.com",
        "plan": "agency",
        "plan_name": "Agency",
        "company": "ACME LLC",
        "webhook_secret": "zq3csqdst0txgo5qe9mkqsourrxo56wd",
        "magic_login_secret": "WdKnLLcsDxpJdfmv",
        "is_subaccount": false,
        "checks_done": 42,
        "checks_left": 1337,
        "checks_limit": 1379,
        "timezone": "UTC",
        "status": "active",
        "renewal_at": "2025-01-01 13:37:42"
    }
}
 

Request   

PUT api/v2/account

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name_first   string  optional  

First Name Example: Jane

name_last   string  optional  

Last Name Example: Doe

company   string  optional  

Company Name Example: ACME LLC

Batch

This object represents Batches of Queues.

List Batches

requires authentication

Returns a list of all Batch. The Batches are sorted by creation date, with the most recent Batches appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/batches';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'above_threshold' => '0',
            'from' => '2024-07-01',
            'to' => '2024-07-04',
            'status' => 'to_fix,false_positive',
            'queue_type' => 'post,comparison',
            'group_ids' => '023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/batches?above_threshold=&from=2024-07-01&to=2024-07-04&status=to_fix%2Cfalse_positive&queue_type=post%2Ccomparison&group_ids=023c282c-6513-420a-a36b-a654312ab229%2C023c282c-6513-420a-a36b-a654312ab230" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/batches"
);

const params = {
    "above_threshold": "0",
    "from": "2024-07-01",
    "to": "2024-07-04",
    "status": "to_fix,false_positive",
    "queue_type": "post,comparison",
    "group_ids": "023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/batches'
params = {
  'above_threshold': '0',
  'from': '2024-07-01',
  'to': '2024-07-04',
  'status': 'to_fix,false_positive',
  'queue_type': 'post,comparison',
  'group_ids': '023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230',
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "0d5f8108-51f1-4961-939a-2d33c7145918",
            "name": "Foobar",
            "sc_version": "2.0",
            "finished_at": "2024-07-29 13:37:42"
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/batches?page=1",
        "last": "http://api.webchangedetector.test/api/v2/batches?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/batches?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/batches",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/batches

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

above_threshold   boolean  optional  

Only show Batches where there is a change detected between 2 screenshots. Example: false

from   string  optional  

Start date for filter. Must be a valid date. Must be a date before to. Example: 2024-07-01

to   string  optional  

End date for filter, defaults to today. Must be a valid date. Must be a date after from. Example: 2024-07-04

status   string  optional  

Comma separated list of Comparison status to filter for. Example: to_fix,false_positive

queue_type   string  optional  

Comma separated list of Queue types to filter for. Example: post,comparison

group_ids   string  optional  

Comma separated list of Group IDs. Example: 023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230

Get Batch

requires authentication

Retrieves a Batch object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "0d5f8108-51f1-4961-939a-2d33c7145918",
        "name": "Foobar",
        "sc_version": "2.0",
        "finished_at": "2024-07-29 13:37:42"
    }
}
 

Request   

GET api/v2/batches/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Batch. Example: 0d5f8108-51f1-4961-939a-2d33c7145918

Update Batch

requires authentication

Updates the specified Batch by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Foobar',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Foobar\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Foobar"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/batches/0d5f8108-51f1-4961-939a-2d33c7145918'
payload = {
    "name": "Foobar"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "id": "0d5f8108-51f1-4961-939a-2d33c7145918",
    "name": "Foobar",
    "sc_version": "2.0",
    "finished_at": "2024-07-29 13:37:42"
}
 

Request   

PUT api/v2/batches/{id}

PATCH api/v2/batches/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Batch. Example: 0d5f8108-51f1-4961-939a-2d33c7145918

Body Parameters

name   string   

The name of the Batch. Example: Foobar

Comparison

This object represents the comparison between 2 Screenshots and how they differ.

List Comparisons

requires authentication

Returns a list of all Comparison. The Comparisons are sorted by creation date, with the most recent Comparisons appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/comparisons';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'above_threshold' => '0',
            'from' => '2024-07-01',
            'to' => '2024-07-04',
            'status' => 'to_fix,false_positive',
            'groups' => '023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230',
            'batches' => '0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918',
            'token' => 'amet',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/comparisons?above_threshold=&from=2024-07-01&to=2024-07-04&status=to_fix%2Cfalse_positive&groups=023c282c-6513-420a-a36b-a654312ab229%2C023c282c-6513-420a-a36b-a654312ab230&batches=0d5f8108-51f1-4961-939a-2d33c7145918%2C1d5f8108-51f1-4961-939a-2d33c7145918&token=amet" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/comparisons"
);

const params = {
    "above_threshold": "0",
    "from": "2024-07-01",
    "to": "2024-07-04",
    "status": "to_fix,false_positive",
    "groups": "023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230",
    "batches": "0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918",
    "token": "amet",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/comparisons'
params = {
  'above_threshold': '0',
  'from': '2024-07-01',
  'to': '2024-07-04',
  'status': 'to_fix,false_positive',
  'groups': '023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230',
  'batches': '0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918',
  'token': 'amet',
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "21cf8800-f906-4fa3-b1db-ed3d2977354d",
            "screenshot_1": "958dce2c-8468-47d3-8bc2-7dc6bf0aadae",
            "screenshot_1_created_at": "2025-01-01 13:37:00",
            "screenshot_1_updated_at": "2025-01-01 13:37:01",
            "screenshot_1_link": "https://storage.webchangedetector.com/folder/screenshot1.png",
            "screenshot_2": "958dce2c-8468-47d3-8bc2-7dc6bf0aadaf",
            "screenshot_2_created_at": "2025-01-01 13:37:00",
            "screenshot_2_updated_at": "2025-01-01 13:37:01",
            "screenshot_2_link": "https://storage.webchangedetector.com/folder/screenshot2.png",
            "html_title": "Foobar",
            "device": "mobile",
            "monitoring": true,
            "group": "023c282c-6513-420a-a36b-a654312ab229",
            "group_name": "Barfoo",
            "queue": "8ea7b88d-b5c6-4fad-8e9d-1497a54d9266",
            "link": "https://storage.webchangedetector.com/folder/comparison.png",
            "batch": "0d5f8108-51f1-4961-939a-2d33c7145918",
            "batch_name": "Auto Update Checks",
            "difference_percent": 0.4,
            "threshold": 0.2,
            "status": "new",
            "public_link": "https://www.webchangedetector.com/show-change-detection?token=f00b4r",
            "token": "f00b4r",
            "url": "https://example.com",
            "url_id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "cms": "wordpress",
            "created_at": "2025-01-01 13:37:00"
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/comparisons?page=1",
        "last": "http://api.webchangedetector.test/api/v2/comparisons?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/comparisons?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/comparisons",
        "per_page": 15,
        "to": 1,
        "total": 1,
        "above_threshold_count": 3
    }
}
 

Request   

GET api/v2/comparisons

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

above_threshold   boolean  optional  

Is a change detected between 2 screenshots. Example: false

from   string  optional  

Start date for filter. Must be a valid date. Must be a date before to. Example: 2024-07-01

to   string  optional  

End date for filter, defaults to today. Must be a valid date. Must be a date after from. Example: 2024-07-04

status   string  optional  

Comma separated list of status to filter for. Example: to_fix,false_positive

groups   string  optional  

Comma separated list of group IDs. Example: 023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230

batches   string  optional  

Batch IDs. Example: 0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918

token   string  optional  

Example: amet

Get Comparison

requires authentication

Retrieves a Comparison object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "21cf8800-f906-4fa3-b1db-ed3d2977354d",
        "screenshot_1": "958dce2c-8468-47d3-8bc2-7dc6bf0aadae",
        "screenshot_1_created_at": "2025-01-01 13:37:00",
        "screenshot_1_updated_at": "2025-01-01 13:37:01",
        "screenshot_1_link": "https://storage.webchangedetector.com/folder/screenshot1.png",
        "screenshot_2": "958dce2c-8468-47d3-8bc2-7dc6bf0aadaf",
        "screenshot_2_created_at": "2025-01-01 13:37:00",
        "screenshot_2_updated_at": "2025-01-01 13:37:01",
        "screenshot_2_link": "https://storage.webchangedetector.com/folder/screenshot2.png",
        "html_title": "Foobar",
        "device": "mobile",
        "monitoring": true,
        "group": "023c282c-6513-420a-a36b-a654312ab229",
        "group_name": "Barfoo",
        "queue": "8ea7b88d-b5c6-4fad-8e9d-1497a54d9266",
        "link": "https://storage.webchangedetector.com/folder/comparison.png",
        "batch": "0d5f8108-51f1-4961-939a-2d33c7145918",
        "batch_name": "Auto Update Checks",
        "difference_percent": 0.4,
        "threshold": 0.2,
        "status": "new",
        "public_link": "https://www.webchangedetector.com/show-change-detection?token=f00b4r",
        "token": "f00b4r",
        "url": "https://example.com",
        "url_id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "cms": "wordpress",
        "created_at": "2025-01-01 13:37:00"
    }
}
 

Request   

GET api/v2/comparisons/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Comparison. Example: 21cf8800-f906-4fa3-b1db-ed3d2977354d

Update Comparison

requires authentication

Updates the specified Comparison by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'status' => 'false_positive',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"false_positive\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "status": "false_positive"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/comparisons/21cf8800-f906-4fa3-b1db-ed3d2977354d'
payload = {
    "status": "false_positive"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "id": "21cf8800-f906-4fa3-b1db-ed3d2977354d",
    "screenshot_1": "958dce2c-8468-47d3-8bc2-7dc6bf0aadae",
    "screenshot_1_created_at": "2025-01-01 13:37:00",
    "screenshot_1_updated_at": "2025-01-01 13:37:01",
    "screenshot_1_link": "https://storage.webchangedetector.com/folder/screenshot1.png",
    "screenshot_2": "958dce2c-8468-47d3-8bc2-7dc6bf0aadaf",
    "screenshot_2_created_at": "2025-01-01 13:37:00",
    "screenshot_2_updated_at": "2025-01-01 13:37:01",
    "screenshot_2_link": "https://storage.webchangedetector.com/folder/screenshot2.png",
    "html_title": "Foobar",
    "device": "mobile",
    "monitoring": true,
    "group": "023c282c-6513-420a-a36b-a654312ab229",
    "group_name": "Barfoo",
    "queue": "8ea7b88d-b5c6-4fad-8e9d-1497a54d9266",
    "link": "https://storage.webchangedetector.com/folder/comparison.png",
    "batch": "0d5f8108-51f1-4961-939a-2d33c7145918",
    "batch_name": "Auto Update Checks",
    "difference_percent": 0.4,
    "threshold": 0.2,
    "status": "new",
    "public_link": "https://www.webchangedetector.com/show-change-detection?token=f00b4r",
    "token": "f00b4r",
    "url": "https://example.com",
    "url_id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
    "cms": "wordpress",
    "created_at": "2025-01-01 13:37:00"
}
 

Request   

PUT api/v2/comparisons/{id}

PATCH api/v2/comparisons/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Comparison. Example: 21cf8800-f906-4fa3-b1db-ed3d2977354d

Body Parameters

status   string   

Mark the comparison as a false positive, as fixed or simply ok. Example: false_positive

Must be one of:
  • false_positive
  • ok
  • to_fix

Group

This object groups together a list of URLs and group wide settings for them.

List Groups

requires authentication

Returns a list of all Groups. The Groups are sorted by creation date, with the most recent Groups appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/groups" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "023c282c-6513-420a-a36b-a654312ab229",
            "name": "Example Group",
            "monitoring": true,
            "enabled": true,
            "hour_of_day": 0,
            "interval_in_h": 24,
            "alert_emails": "hello@example.com,test@foobar.com",
            "css": null,
            "js": null,
            "threshold": 0.2,
            "urls_count": 42
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/groups?page=1",
        "last": "http://api.webchangedetector.test/api/v2/groups?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/groups?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/groups",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/groups

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Create Group

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Example Group',
            'monitoring' => true,
            'enabled' => true,
            'hour_of_day' => 0,
            'interval_in_h' => 24,
            'alert_emails' => [
                'hello@example.com',
                'mail@example.com',
            ],
            'css' => '.btn {visibility: none;}',
            'js' => '',
            'threshold' => 0.4,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/groups" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Example Group\",
    \"monitoring\": true,
    \"enabled\": true,
    \"hour_of_day\": 0,
    \"interval_in_h\": 24,
    \"alert_emails\": [
        \"hello@example.com\",
        \"mail@example.com\"
    ],
    \"css\": \".btn {visibility: none;}\",
    \"js\": \"\",
    \"threshold\": 0.4
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Example Group",
    "monitoring": true,
    "enabled": true,
    "hour_of_day": 0,
    "interval_in_h": 24,
    "alert_emails": [
        "hello@example.com",
        "mail@example.com"
    ],
    "css": ".btn {visibility: none;}",
    "js": "",
    "threshold": 0.4
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups'
payload = {
    "name": "Example Group",
    "monitoring": true,
    "enabled": true,
    "hour_of_day": 0,
    "interval_in_h": 24,
    "alert_emails": [
        "hello@example.com",
        "mail@example.com"
    ],
    "css": ".btn {visibility: none;}",
    "js": "",
    "threshold": 0.4
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "023c282c-6513-420a-a36b-a654312ab229",
        "name": "Example Group",
        "monitoring": true,
        "enabled": true,
        "hour_of_day": 0,
        "interval_in_h": 24,
        "alert_emails": "hello@example.com,test@foobar.com",
        "css": ".btn {visibility: none;}",
        "js": "",
        "threshold": 0.2,
        "urls_count": 42
    }
}
 

Request   

POST api/v2/groups

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

Name of the Group. Example: Example Group

monitoring   boolean  optional  

Defaults to false. Example: true

Must be one of:
  • true
  • false
enabled   boolean  optional  

Defaults to true. Example: true

Must be one of:
  • true
  • false
hour_of_day   integer  optional  

Which hour of the day are the auto updates executed. Defaults to 0 Example: 0

interval_in_h   number  optional  

One of the following intervals of the hour. Defaults to 24 Example: 24

Must be one of:
  • 0.25
  • 0.5
  • 3
  • 6
  • 12
  • 24
alert_emails   string[]  optional  

A list of emails to notify. Defaults to the account email.

css   string  optional  

CSS to be injected before the screenshot is taken for all URLs in this group Example: .btn {visibility: none;}

js   string  optional  

JavaScript to be injected before the screenshot is taken for all URLs in this group

threshold   numeric  optional  

Difference in percent of when this counts as a change detection for all URLs in this group Example: 0.4

Get Group

requires authentication

Retrieves a Group object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "023c282c-6513-420a-a36b-a654312ab229",
        "name": "Example Group",
        "monitoring": true,
        "enabled": true,
        "hour_of_day": 0,
        "interval_in_h": 24,
        "alert_emails": "hello@example.com,test@foobar.com",
        "css": null,
        "js": null,
        "threshold": 0.2,
        "urls_count": 42
    }
}
 

Request   

GET api/v2/groups/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

Update Group

requires authentication

Updates the specified Group by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Example Group',
            'monitoring' => true,
            'enabled' => true,
            'hour_of_day' => 0,
            'interval_in_h' => 24,
            'alert_emails' => [
                'hello@example.com',
                'mail@example.com',
            ],
            'css' => '.btn {visibility: none;}',
            'js' => '',
            'threshold' => 0.4,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Example Group\",
    \"monitoring\": true,
    \"enabled\": true,
    \"hour_of_day\": 0,
    \"interval_in_h\": 24,
    \"alert_emails\": [
        \"hello@example.com\",
        \"mail@example.com\"
    ],
    \"css\": \".btn {visibility: none;}\",
    \"js\": \"\",
    \"threshold\": 0.4
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Example Group",
    "monitoring": true,
    "enabled": true,
    "hour_of_day": 0,
    "interval_in_h": 24,
    "alert_emails": [
        "hello@example.com",
        "mail@example.com"
    ],
    "css": ".btn {visibility: none;}",
    "js": "",
    "threshold": 0.4
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229'
payload = {
    "name": "Example Group",
    "monitoring": true,
    "enabled": true,
    "hour_of_day": 0,
    "interval_in_h": 24,
    "alert_emails": [
        "hello@example.com",
        "mail@example.com"
    ],
    "css": ".btn {visibility: none;}",
    "js": "",
    "threshold": 0.4
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "023c282c-6513-420a-a36b-a654312ab229",
        "name": "Example Group",
        "monitoring": true,
        "enabled": true,
        "hour_of_day": 0,
        "interval_in_h": 24,
        "alert_emails": "hello@example.com,test@foobar.com",
        "css": ".btn {visibility: none;}",
        "js": "",
        "threshold": 0.2,
        "urls_count": 42
    }
}
 

Request   

PUT api/v2/groups/{id}

PATCH api/v2/groups/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

Body Parameters

name   string  optional  

Name of the Group. Example: Example Group

monitoring   boolean  optional  

Defaults to false. Example: true

Must be one of:
  • true
  • false
enabled   boolean  optional  

Defaults to true. Example: true

Must be one of:
  • true
  • false
hour_of_day   integer  optional  

Which hour of the day are the auto updates executed. Defaults to 0 Example: 0

interval_in_h   number  optional  

One of the following intervals of the hour. Defaults to 24 Example: 24

Must be one of:
  • 0.25
  • 0.5
  • 3
  • 6
  • 12
  • 24
alert_emails   string[]  optional  

A list of emails to notify. Defaults to the account email.

css   string  optional  

CSS to be injected before the screenshot is taken for all URLs in this group Example: .btn {visibility: none;}

js   string  optional  

JavaScript to be injected before the screenshot is taken for all URLs in this group

threshold   numeric  optional  

Difference in percent of when this counts as a change detection for all URLs in this group Example: 0.4

Delete Group

requires authentication

Permanently deletes a Group. This cannot be undone.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200):


{
    "message": "{ID} deleted"
}
 

Request   

DELETE api/v2/groups/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

Add Urls To Group

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/add-urls';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'urls' => [
                [
                    'id' => '418e0748-a9cf-480b-86d6-88b00bac00b9',
                    'desktop' => true,
                ],
                [
                    'id' => '418e0748-a9cf-480b-86d6-88b00bac00c1',
                    'mobile' => false,
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/add-urls" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"urls\": [
        {
            \"id\": \"418e0748-a9cf-480b-86d6-88b00bac00b9\",
            \"desktop\": true
        },
        {
            \"id\": \"418e0748-a9cf-480b-86d6-88b00bac00c1\",
            \"mobile\": false
        }
    ]
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/add-urls"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "urls": [
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "desktop": true
        },
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00c1",
            "mobile": false
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/add-urls'
payload = {
    "urls": [
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "desktop": true
        },
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00c1",
            "mobile": false
        }
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "count": "{Amount of URLs added}"
}
 

Request   

POST api/v2/groups/{id}/add-urls

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

Body Parameters

urls   string[]   

Array of URLs with their settings in this Group

id   string   

Must be a valid UUID. Example: 43c13918-6567-3762-8db5-7e29ed930b7e

desktop   boolean  optional  

Example: false

mobile   boolean  optional  

Example: false

css   string  optional  
js   string  optional  

Remove Urls From Group

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/remove-urls';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'urls' => [
                '418e0748-a9cf-480b-86d6-88b00bac00b9',
                '418e0748-a9cf-480b-86d6-88b00bac00c1',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/remove-urls" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"urls\": [
        \"418e0748-a9cf-480b-86d6-88b00bac00b9\",
        \"418e0748-a9cf-480b-86d6-88b00bac00c1\"
    ]
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/remove-urls"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "urls": [
        "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "418e0748-a9cf-480b-86d6-88b00bac00c1"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/remove-urls'
payload = {
    "urls": [
        "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "418e0748-a9cf-480b-86d6-88b00bac00c1"
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "count": "{Amount of URLs removed}"
}
 

Request   

POST api/v2/groups/{id}/remove-urls

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

Body Parameters

urls   string[]   

Array of URL IDs

List Urls For Group

requires authentication

Returns a list of all Urls. The Urls are sorted by creation date, with the most recent Urls appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'per_page' => 19,
            'type' => 'quisquam',
            'category' => 'et',
            'search' => 'aut',
            'url_ids' => 'perferendis',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 19,
    \"type\": \"quisquam\",
    \"category\": \"et\",
    \"search\": \"aut\",
    \"url_ids\": \"perferendis\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "per_page": 19,
    "type": "quisquam",
    "category": "et",
    "search": "aut",
    "url_ids": "perferendis"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls'
payload = {
    "per_page": 19,
    "type": "quisquam",
    "category": "et",
    "search": "aut",
    "url_ids": "perferendis"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "html_title": "Example Title",
            "url": "example.com/foobar",
            "last_crawled_at": "2025-01-01 13:37:42",
            "desktop": true,
            "mobile": true,
            "css": null,
            "js": null,
            "threshold": null,
            "group": "023c282c-6513-420a-a36b-a654312ab229"
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/group/023c282c-6513-420a-a36b-a654312ab229/urls?page=1",
        "last": "http://api.webchangedetector.test/api/v2/group/023c282c-6513-420a-a36b-a654312ab229/urls?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/group/023c282c-6513-420a-a36b-a654312ab229/urls?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/group/023c282c-6513-420a-a36b-a654312ab229/urls",
        "per_page": 15,
        "to": 1,
        "total": 1,
        "selected_urls_count": 1
    }
}
 

Request   

GET api/v2/groups/{id}/urls

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

type   string   

URL Type. Example: foobar

category   string   

Category. Example: barfoo

search   string   

Search in html_title and url. Example: loremipsum

url_ids   string   

Comma separated list of URL UUIDs Example: repellendus

Body Parameters

per_page   integer  optional  

Example: 19

type   string  optional  

Example: quisquam

category   string  optional  

Example: et

search   string  optional  

Example: aut

url_ids   string  optional  

Example: perferendis

Update Url In Group

requires authentication

Updates a URL within a group.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls/418e0748-a9cf-480b-86d6-88b00bac00b9';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'desktop' => true,
            'mobile' => true,
            'css' => '.btn {visibility: none;}',
            'js' => 'nisi',
            'threshold' => 0.4,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls/418e0748-a9cf-480b-86d6-88b00bac00b9" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"desktop\": true,
    \"mobile\": true,
    \"css\": \".btn {visibility: none;}\",
    \"js\": \"nisi\",
    \"threshold\": 0.4
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls/418e0748-a9cf-480b-86d6-88b00bac00b9"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "desktop": true,
    "mobile": true,
    "css": ".btn {visibility: none;}",
    "js": "nisi",
    "threshold": 0.4
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls/418e0748-a9cf-480b-86d6-88b00bac00b9'
payload = {
    "desktop": true,
    "mobile": true,
    "css": ".btn {visibility: none;}",
    "js": "nisi",
    "threshold": 0.4
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "html_title": "Example Title",
        "url": "example.com/foobar",
        "last_crawled_at": "2025-01-01 13:37:42",
        "desktop": true,
        "mobile": true,
        "css": ".btn {visibility: none;}",
        "js": null,
        "threshold": null,
        "group": "023c282c-6513-420a-a36b-a654312ab229"
    },
    "meta": {
        "selected_urls_count": 1
    }
}
 

Request   

PUT api/v2/groups/{group_id}/urls/{url_id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

url_id   string   

The ID of the URL in that Group. Example: 418e0748-a9cf-480b-86d6-88b00bac00b9

Body Parameters

desktop   boolean  optional  

Should a desktop screenshot be taken Example: true

Must be one of:
  • true
  • false
mobile   boolean  optional  

Should a mobile screenshot be taken Example: true

Must be one of:
  • true
  • false
css   string  optional  

CSS to be injected before the screenshot is taken Example: .btn {visibility: none;}

js   string  optional  

JavaScript to be injected before the screenshot is taken Example: nisi

threshold   numeric  optional  

Difference in percent of when this counts as a change detection Example: 0.4

Update All Urls In Group

requires authentication

Updates all URLs within a group.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'urls' => [
                [
                    'id' => '418e0748-a9cf-480b-86d6-88b00bac00b9',
                    'desktop' => true,
                    'mobile' => true,
                    'css' => null,
                    'js' => null,
                    'threshold' => 0.4,
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"urls\": [
        {
            \"id\": \"418e0748-a9cf-480b-86d6-88b00bac00b9\",
            \"desktop\": true,
            \"mobile\": true,
            \"css\": null,
            \"js\": null,
            \"threshold\": 0.4
        }
    ]
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "urls": [
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "desktop": true,
            "mobile": true,
            "css": null,
            "js": null,
            "threshold": 0.4
        }
    ]
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/groups/023c282c-6513-420a-a36b-a654312ab229/urls'
payload = {
    "urls": [
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "desktop": true,
            "mobile": true,
            "css": null,
            "js": null,
            "threshold": 0.4
        }
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "message": "42 URLs in Group 023c282c-6513-420a-a36b-a654312ab229 changed"
}
 

Request   

PUT api/v2/groups/{group_id}/urls

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

group_id   string   

The ID of the Group. Example: 023c282c-6513-420a-a36b-a654312ab229

Body Parameters

urls   string[]  optional  

Array of URLs with settings

desktop   boolean  optional  

Should a desktop screenshot be taken Example: true

Must be one of:
  • true
  • false
mobile   boolean  optional  

Should a mobile screenshot be taken Example: true

Must be one of:
  • true
  • false
css   string  optional  

CSS to be injected before the screenshot is taken Example: .btn {visibility: none;}

js   string  optional  

JavaScript to be injected before the screenshot is taken

threshold   numeric  optional  

Difference in percent of when this counts as a change detection Example: 0.4

id   string   

The ID of the URL in that Group. Example: 418e0748-a9cf-480b-86d6-88b00bac00b9

Queue

This object represents a log of taking screenshots, comparing screenshots and their status.

List Queues

requires authentication

Returns a list of all Queues. The Queues are sorted by creation date, with the most recent Queues appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/queues';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'status' => 'done,failed',
            'groups' => '023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230',
            'batches' => '0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/queues?status=done%2Cfailed&groups=023c282c-6513-420a-a36b-a654312ab229%2C023c282c-6513-420a-a36b-a654312ab230&batches=0d5f8108-51f1-4961-939a-2d33c7145918%2C1d5f8108-51f1-4961-939a-2d33c7145918" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/queues"
);

const params = {
    "status": "done,failed",
    "groups": "023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230",
    "batches": "0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/queues'
params = {
  'status': 'done,failed',
  'groups': '023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230',
  'batches': '0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918',
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "3bf0cec1-e8ee-49ba-804e-0db5ed93a7e3",
            "url": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "batch": "0d5f8108-51f1-4961-939a-2d33c7145918",
            "group": "023c282c-6513-420a-a36b-a654312ab229",
            "device": "desktop",
            "status": "open",
            "sc_type": "pre",
            "css": null,
            "js": null,
            "monitoring": true,
            "url_link": "https://example.com",
            "html_title": "Example Title",
            "image_link": "https://images.webchangedetector.com/image.jpg",
            "created_at": "2024-08-08 13:37:42",
            "updated_at": "2024-08-08 13:37:42"
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/queues?page=1",
        "last": "http://api.webchangedetector.test/api/v2/queues?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/queues?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/queues",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/queues

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

status   string  optional  

Comma separated list of status to filter for. Example: done,failed

groups   string  optional  

Comma separated list of Group UUIDs to filter for. Example: 023c282c-6513-420a-a36b-a654312ab229,023c282c-6513-420a-a36b-a654312ab230

batches   string  optional  

Comma separated list of Batch UUIDs to filter for. Example: 0d5f8108-51f1-4961-939a-2d33c7145918,1d5f8108-51f1-4961-939a-2d33c7145918

Get Queue

requires authentication

Retrieves a Queue object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/queues/3bf0cec1-e8ee-49ba-804e-0db5ed93a7e3';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/queues/3bf0cec1-e8ee-49ba-804e-0db5ed93a7e3" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/queues/3bf0cec1-e8ee-49ba-804e-0db5ed93a7e3"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/queues/3bf0cec1-e8ee-49ba-804e-0db5ed93a7e3'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "3bf0cec1-e8ee-49ba-804e-0db5ed93a7e3",
        "url": "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "batch": "0d5f8108-51f1-4961-939a-2d33c7145918",
        "group": "023c282c-6513-420a-a36b-a654312ab229",
        "device": "desktop",
        "status": "open",
        "sc_type": "pre",
        "css": null,
        "js": null,
        "monitoring": true,
        "url_link": "https://example.com",
        "html_title": "Example Title",
        "image_link": "https://images.webchangedetector.com/image.jpg",
        "created_at": "2024-08-08 13:37:42",
        "updated_at": "2024-08-08 13:37:42"
    }
}
 

Request   

GET api/v2/queues/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Queue. Example: 3bf0cec1-e8ee-49ba-804e-0db5ed93a7e3

Screenshot

This object represents the actual screenshot and the location it's stored at.

List Screenshots

requires authentication

Returns a list of all Screenshots. The Screenshots are sorted by creation date, with the most recent Screenshots appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/screenshots';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/screenshots" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/screenshots"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/screenshots'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "958dce2c-8468-47d3-8bc2-7dc6bf0aadae",
            "queue": "8ea7b88d-b5c6-4fad-8e9d-1497a54d9266",
            "domain": "example.com",
            "url": "example.com/foobar",
            "link": "https://images.webchangedetector.com/example.jpg",
            "device": "desktop",
            "sc_type": "pre",
            "monitoring": true
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/screenshots?page=1",
        "last": "http://api.webchangedetector.test/api/v2/screenshots?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/screenshots?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/screenshots",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/screenshots

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Get Screenshot

requires authentication

Retrieves a Screenshot object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/screenshots/958dce2c-8468-47d3-8bc2-7dc6bf0aadae';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/screenshots/958dce2c-8468-47d3-8bc2-7dc6bf0aadae" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/screenshots/958dce2c-8468-47d3-8bc2-7dc6bf0aadae"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/screenshots/958dce2c-8468-47d3-8bc2-7dc6bf0aadae'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "958dce2c-8468-47d3-8bc2-7dc6bf0aadae",
        "queue": "8ea7b88d-b5c6-4fad-8e9d-1497a54d9266",
        "domain": "example.com",
        "url": "example.com/foobar",
        "link": "https://images.webchangedetector.com/example.jpg",
        "device": "desktop",
        "sc_type": "pre",
        "monitoring": true
    }
}
 

Request   

GET api/v2/screenshots/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Screenshot. Example: 958dce2c-8468-47d3-8bc2-7dc6bf0aadae

Take Screenshot

requires authentication

Adds screenshots (and comparisons) of URLs in the passed groups to the queue. The parameter sc_type indicates if pre-update screenshots are taken (pre) or post-update screenshots and comparisons are taken (post).

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/screenshots/take';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'group_ids' => '["023c282c-6513-420a-a36b-a654312ab229", "023c282c-6513-420a-a36b-a654312ab230"]',
            'sc_type' => 'pre',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/screenshots/take" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"group_ids\": \"[\\\"023c282c-6513-420a-a36b-a654312ab229\\\", \\\"023c282c-6513-420a-a36b-a654312ab230\\\"]\",
    \"sc_type\": \"pre\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/screenshots/take"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "group_ids": "[\"023c282c-6513-420a-a36b-a654312ab229\", \"023c282c-6513-420a-a36b-a654312ab230\"]",
    "sc_type": "pre"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/screenshots/take'
payload = {
    "group_ids": "[\"023c282c-6513-420a-a36b-a654312ab229\", \"023c282c-6513-420a-a36b-a654312ab230\"]",
    "sc_type": "pre"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, Success):


{
    "batch": "0d5f8108-51f1-4961-939a-2d33c7145918",
    "amount_screenshots": 42,
    "groups": [
        "023c282c-6513-420a-a36b-a654312ab229",
        "023c282c-6513-420a-a36b-a654312ab230"
    ]
}
 

Example response (402, Not enough credits):


{
    "message": "Bummer, you used your credit already. Please upgrade your account to a bigger plan."
}
 

Request   

POST api/v2/screenshots/take

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

group_ids   string[]   

A list of Groups. Example: ["023c282c-6513-420a-a36b-a654312ab229", "023c282c-6513-420a-a36b-a654312ab230"]

sc_type   string  optional  

Example: pre

Must be one of:
  • pre
  • post

Subaccount

This object represents a Subaccount

List Subaccounts

requires authentication

Returns a list of all Subaccounts. The Subaccounts are sorted by creation date, with the most recent Subaccounts appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/subaccounts';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/subaccounts" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/subaccounts"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/subaccounts'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "17482316-2398-4374-9f70-e0e3e2bf292a",
            "name_first": "Jane",
            "name_last": "Doe",
            "email": "mail@example.com",
            "checks_done": 42,
            "checks_left": 1337,
            "timezone": "UTC",
            "is_subaccount": true
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/subaccounts?page=1",
        "last": "http://api.webchangedetector.test/api/v2/subaccounts?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/subaccounts?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/subaccounts",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/subaccounts

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Create Subaccount

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/subaccounts';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name_first' => 'Hans',
            'name_last' => 'Hacker',
            'email' => 'mail@example.com',
            'limit_checks' => 35465.40168148,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/subaccounts" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name_first\": \"Hans\",
    \"name_last\": \"Hacker\",
    \"email\": \"mail@example.com\",
    \"limit_checks\": 35465.40168148
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/subaccounts"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name_first": "Hans",
    "name_last": "Hacker",
    "email": "mail@example.com",
    "limit_checks": 35465.40168148
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/subaccounts'
payload = {
    "name_first": "Hans",
    "name_last": "Hacker",
    "email": "mail@example.com",
    "limit_checks": 35465.40168148
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "17482316-2398-4374-9f70-e0e3e2bf292a",
        "name_first": "Jane",
        "name_last": "Doe",
        "email": "mail@example.com",
        "checks_done": 42,
        "checks_left": 1337,
        "timezone": "UTC",
        "api_token": "V82abQfqPA3hBXL9ZHfMAt94Ta23VUdYt691D7GO",
        "is_subaccount": true
    }
}
 

Request   

POST api/v2/subaccounts

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name_first   string   

First Name Example: Hans

name_last   string   

Last Name Example: Hacker

email   string   

Must be a valid email Example: mail@example.com

limit_checks   number   

Example: 35465.40168148

Get Subaccount

requires authentication

Retrieves a Subaccount object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "17482316-2398-4374-9f70-e0e3e2bf292a",
        "name_first": "Jane",
        "name_last": "Doe",
        "email": "mail@example.com",
        "checks_done": 42,
        "checks_left": 1337,
        "timezone": "UTC",
        "is_subaccount": true
    }
}
 

Request   

GET api/v2/subaccounts/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Subaccount. Example: 17482316-2398-4374-9f70-e0e3e2bf292a

Update Subaccount

requires authentication

Updates the specified Subaccount by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name_first' => 'Hans',
            'name_last' => 'Hacker',
            'limit_checks' => 293867.2,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name_first\": \"Hans\",
    \"name_last\": \"Hacker\",
    \"limit_checks\": 293867.2
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name_first": "Hans",
    "name_last": "Hacker",
    "limit_checks": 293867.2
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a'
payload = {
    "name_first": "Hans",
    "name_last": "Hacker",
    "limit_checks": 293867.2
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "17482316-2398-4374-9f70-e0e3e2bf292a",
        "name_first": "Jane",
        "name_last": "Doe",
        "email": "mail@example.com",
        "checks_done": 42,
        "checks_left": 1337,
        "timezone": "UTC",
        "is_subaccount": true
    }
}
 

Request   

PUT api/v2/subaccounts/{id}

PATCH api/v2/subaccounts/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Subaccount. Example: 17482316-2398-4374-9f70-e0e3e2bf292a

Body Parameters

name_first   string   

First Name Example: Hans

name_last   string   

Last Name Example: Hacker

limit_checks   number  optional  

Example: 293867.2

Delete Subaccount

requires authentication

Permanently deletes a Subaccount. This cannot be undone.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/subaccounts/17482316-2398-4374-9f70-e0e3e2bf292a'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200):


{
    "message": "Subaccount deleted"
}
 

Request   

DELETE api/v2/subaccounts/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Subaccount. Example: 17482316-2398-4374-9f70-e0e3e2bf292a

Url

This object represents a single URL and specific settings

List Urls

requires authentication

Returns a list of all Urls. The Urls are sorted by creation date, with the most recent Urls appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/urls';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/urls" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/urls"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/urls'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
            "html_title": "Example Title",
            "url": "example.com/foobar",
            "last_crawled_at": "2025-01-01 13:37:42",
            "type": "types",
            "category": "Seiten",
            "website": "91e9c9fd-b86f-4269-a3f4-f02810167a6d",
            "groups": [
                "023c282c-6513-420a-a36b-a654312ab229",
                "023c282c-6513-420a-a36b-a654312ab230"
            ]
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/urls?page=1",
        "last": "http://api.webchangedetector.test/api/v2/urls?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/urls?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/urls",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/urls

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Create Url

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/urls';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'url' => 'https://example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/urls" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/example.com\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/urls"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:\/\/example.com"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/urls'
payload = {
    "url": "https:\/\/example.com"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "html_title": "Example Title",
        "url": "example.com/foobar",
        "last_crawled_at": "2025-01-01 13:37:42",
        "type": null,
        "category": null,
        "website": null,
        "groups": []
    }
}
 

Request   

POST api/v2/urls

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

url   string   

Must be a valid URL Example: https://example.com

Get Url

requires authentication

Retrieves a Url object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "html_title": "Example Title",
        "url": "example.com/foobar",
        "last_crawled_at": "2025-01-01 13:37:42",
        "type": "types",
        "category": "Seiten",
        "website": "91e9c9fd-b86f-4269-a3f4-f02810167a6d",
        "groups": [
            "023c282c-6513-420a-a36b-a654312ab229",
            "023c282c-6513-420a-a36b-a654312ab230"
        ]
    }
}
 

Request   

GET api/v2/urls/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Url. Example: 418e0748-a9cf-480b-86d6-88b00bac00b9

Update Url

requires authentication

Updates the specified Url by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'url' => 'https://example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/example.com\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:\/\/example.com"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9'
payload = {
    "url": "https:\/\/example.com"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "418e0748-a9cf-480b-86d6-88b00bac00b9",
        "html_title": "Example Title",
        "url": "example.com/foobar",
        "last_crawled_at": "2025-01-01 13:37:42",
        "type": "types",
        "category": "Seiten",
        "website": "91e9c9fd-b86f-4269-a3f4-f02810167a6d",
        "groups": [
            "023c282c-6513-420a-a36b-a654312ab229",
            "023c282c-6513-420a-a36b-a654312ab230"
        ]
    }
}
 

Request   

PUT api/v2/urls/{id}

PATCH api/v2/urls/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Url. Example: 418e0748-a9cf-480b-86d6-88b00bac00b9

Body Parameters

url   string   

Must be a valid URL Example: https://example.com

Delete Url

requires authentication

Permanently deletes a Url. This cannot be undone.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/urls/418e0748-a9cf-480b-86d6-88b00bac00b9'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200):


{
    "message": "URL deleted"
}
 

Request   

DELETE api/v2/urls/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Url. Example: 418e0748-a9cf-480b-86d6-88b00bac00b9

Add From Sitemap

requires authentication

Adds all the URLs found in a sitemap for a given domain.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/urls/add-from-sitemap';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'domain' => 'example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/urls/add-from-sitemap" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain\": \"example.com\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/urls/add-from-sitemap"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "domain": "example.com"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/urls/add-from-sitemap'
payload = {
    "domain": "example.com"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "message": "Sitemap parsing started."
}
 

Request   

POST api/v2/urls/add-from-sitemap

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

domain   string   

The domain to parse the sitemap from Example: example.com

Webhook

This object contains the webhook calls a user can set to be notified for various events.

List Webhooks

requires authentication

Returns a list of all Webhooks. The Webhooks are sorted by creation date, with the most recent Webhooks appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/webhooks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'event' => 'comparison_status_new',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/webhooks?event=comparison_status_new" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/webhooks"
);

const params = {
    "event": "comparison_status_new",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/webhooks'
params = {
  'event': 'comparison_status_new',
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "d86e9245-3524-4f8d-b5d9-e4a472136d27",
            "event": "comparison_status_new",
            "url": "https://example.com"
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/webhooks?page=1",
        "last": "http://api.webchangedetector.test/api/v2/webhooks?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/webhooks?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/webhooks",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/webhooks

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

event   string  optional  

Event of the Queue. Example: comparison_status_new

Must be one of:
  • batch_finished
  • comparison_status_new
  • queue_status_done
  • queue_status_failed

Create Webhook

requires authentication

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/webhooks';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'url' => 'http://harber.com/',
            'event' => 'queue_status_failed',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request POST \
    "https://api.webchangedetector.com/api/v2/webhooks" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"http:\\/\\/harber.com\\/\",
    \"event\": \"queue_status_failed\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/webhooks"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "http:\/\/harber.com\/",
    "event": "queue_status_failed"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/webhooks'
payload = {
    "url": "http:\/\/harber.com\/",
    "event": "queue_status_failed"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "d86e9245-3524-4f8d-b5d9-e4a472136d27",
        "event": "comparison_status_new",
        "url": "https://example.com"
    }
}
 

Request   

POST api/v2/webhooks

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

url   string   

Must be a valid URL. Example: http://harber.com/

event   string   

Example: queue_status_failed

Must be one of:
  • batch_finished
  • comparison_status_new
  • queue_status_done
  • queue_status_failed
  • wordpress_cron

Get Webhook

requires authentication

Retrieves a Webhook object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "d86e9245-3524-4f8d-b5d9-e4a472136d27",
        "event": "comparison_status_new",
        "url": "https://example.com"
    }
}
 

Request   

GET api/v2/webhooks/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Webhook. Example: d86e9245-3524-4f8d-b5d9-e4a472136d27

Update Webhook

requires authentication

Updates the specified Webhook by setting the values of the parameters passed.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'url' => 'https://example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/example.com\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:\/\/example.com"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27'
payload = {
    "url": "https:\/\/example.com"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "d86e9245-3524-4f8d-b5d9-e4a472136d27",
        "event": "comparison_status_new",
        "url": "https://example.com"
    }
}
 

Request   

PUT api/v2/webhooks/{id}

PATCH api/v2/webhooks/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Webhook. Example: d86e9245-3524-4f8d-b5d9-e4a472136d27

Body Parameters

url   string   

Must be a valid URL Example: https://example.com

Delete Webhook

requires authentication

Permanently deletes a Webhook. This cannot be undone.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request DELETE \
    "https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/webhooks/d86e9245-3524-4f8d-b5d9-e4a472136d27'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200):


{
    "message": "{ID} deleted"
}
 

Request   

DELETE api/v2/webhooks/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Webhook. Example: d86e9245-3524-4f8d-b5d9-e4a472136d27

Website

This object represents Websites.

List Websites

requires authentication

Returns a list of all Website. The Websites are sorted by creation date, with the most recent Websites appearing first.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/websites';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/websites" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/websites"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/websites'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "91e9c9fd-b86f-4269-a3f4-f02810167a6d",
            "manual_detection_group": "023c282c-6513-420a-a36b-a654312ab229",
            "auto_detection_group": "023c282c-6513-420a-a36b-a654312ab230",
            "domain": "example.com",
            "sync_url_types": [
                {
                    "url_type_slug": "types",
                    "url_type_name": "Post Types",
                    "post_type_slug": "posts",
                    "post_type_name": "Posts"
                }
            ],
            "auto_update_settings": {
                "auto_update_checks_enabled": "0",
                "auto_update_checks_from": "13:37",
                "auto_update_checks_to": "13:42",
                "auto_update_checks_monday": "1",
                "auto_update_checks_tuesday": "1",
                "auto_update_checks_wednesday": "1",
                "auto_update_checks_thursday": "1",
                "auto_update_checks_friday": "1",
                "auto_update_checks_saturday": "0",
                "auto_update_checks_sunday": "0",
                "auto_update_checks_emails": "mail@example.com"
            },
            "allowances": {
                "change_detections_view": 1,
                "manual_checks_view": 1,
                "manual_checks_start": 1,
                "manual_checks_settings": 1,
                "manual_checks_urls": 1,
                "monitoring_checks_view": 1,
                "monitoring_checks_settings": 1,
                "monitoring_checks_urls": 1,
                "logs_view": 1,
                "settings_view": 1,
                "settings_add_urls": 1,
                "settings_account_settings": 1,
                "upgrade_account": 1,
                "wizard_start": 1,
                "only_frontpage": 0
            }
        }
    ],
    "links": {
        "first": "http://api.webchangedetector.test/api/v2/websites?page=1",
        "last": "http://api.webchangedetector.test/api/v2/websites?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "http://api.webchangedetector.test/api/v2/websites?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "http://api.webchangedetector.test/api/v2/websites",
        "per_page": 15,
        "to": 1,
        "total": 1
    }
}
 

Request   

GET api/v2/websites

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Get Website

requires authentication

Retrieves a Website object identfied by their ID

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request GET \
    --get "https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d'
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "91e9c9fd-b86f-4269-a3f4-f02810167a6d",
        "manual_detection_group": "023c282c-6513-420a-a36b-a654312ab229",
        "auto_detection_group": "023c282c-6513-420a-a36b-a654312ab230",
        "domain": "example.com",
        "sync_url_types": [
            {
                "url_type_slug": "types",
                "url_type_name": "Post Types",
                "post_type_slug": "posts",
                "post_type_name": "Posts"
            }
        ],
        "auto_update_settings": {
            "auto_update_checks_enabled": "0",
            "auto_update_checks_from": "13:37",
            "auto_update_checks_to": "13:42",
            "auto_update_checks_monday": "1",
            "auto_update_checks_tuesday": "1",
            "auto_update_checks_wednesday": "1",
            "auto_update_checks_thursday": "1",
            "auto_update_checks_friday": "1",
            "auto_update_checks_saturday": "0",
            "auto_update_checks_sunday": "0",
            "auto_update_checks_emails": "mail@example.com"
        },
        "allowances": {
            "change_detections_view": 1,
            "manual_checks_view": 1,
            "manual_checks_start": 1,
            "manual_checks_settings": 1,
            "manual_checks_urls": 1,
            "monitoring_checks_view": 1,
            "monitoring_checks_settings": 1,
            "monitoring_checks_urls": 1,
            "logs_view": 1,
            "settings_view": 1,
            "settings_add_urls": 1,
            "settings_account_settings": 1,
            "upgrade_account": 1,
            "wizard_start": 1,
            "only_frontpage": 0
        }
    }
}
 

Request   

GET api/v2/websites/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Website. Example: 91e9c9fd-b86f-4269-a3f4-f02810167a6d

Update Website

requires authentication

Updates the specified Website by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'sync_url_types' => 'Foobar',
            'auto_update_settings' => 'Foobar',
            'allowances' => 'Foobar',
            'name' => 'Foobar',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
curl --request PUT \
    "https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"sync_url_types\": \"Foobar\",
    \"auto_update_settings\": \"Foobar\",
    \"allowances\": \"Foobar\",
    \"name\": \"Foobar\"
}"
const url = new URL(
    "https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d"
);

const headers = {
    "Authorization": "Bearer {YOUR_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "sync_url_types": "Foobar",
    "auto_update_settings": "Foobar",
    "allowances": "Foobar",
    "name": "Foobar"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json

url = 'https://api.webchangedetector.com/api/v2/websites/91e9c9fd-b86f-4269-a3f4-f02810167a6d'
payload = {
    "sync_url_types": "Foobar",
    "auto_update_settings": "Foobar",
    "allowances": "Foobar",
    "name": "Foobar"
}
headers = {
  'Authorization': 'Bearer {YOUR_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "id": "91e9c9fd-b86f-4269-a3f4-f02810167a6d",
    "allowances": {
        "change_detections_view": 1,
        "manual_checks_view": 1,
        "manual_checks_start": 1,
        "manual_checks_settings": 1,
        "manual_checks_urls": 1,
        "monitoring_checks_view": 1,
        "monitoring_checks_settings": 1,
        "monitoring_checks_urls": 1,
        "logs_view": 1,
        "settings_view": 1,
        "settings_add_urls": 1,
        "settings_account_settings": 1,
        "upgrade_account": 1,
        "wizard_start": 1,
        "only_frontpage": 0
    },
    "sync_url_types": [
        {
            "url_type_slug": "types",
            "url_type_name": "Post Types",
            "post_type_slug": "posts",
            "post_type_name": "Posts"
        },
        {
            "url_type_slug": "types",
            "url_type_name": "Post Types",
            "post_type_slug": "pages",
            "post_type_name": "Pages"
        }
    ],
    "auto_update_settings": {
        "auto_update_checks_enabled": null,
        "auto_update_checks_from": "13:37",
        "auto_update_checks_to": "13:42",
        "auto_update_checks_monday": 1,
        "auto_update_checks_tuesday": 1,
        "auto_update_checks_wednesday": 1,
        "auto_update_checks_thursday": 1,
        "auto_update_checks_friday": 1,
        "auto_update_checks_saturday": 0,
        "auto_update_checks_sunday": 0,
        "auto_update_checks_emails": "mail@example.com"
    }
}
 

Request   

PUT api/v2/websites/{id}

PATCH api/v2/websites/{id}

Headers

Authorization      

Example: Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the Website. Example: 91e9c9fd-b86f-4269-a3f4-f02810167a6d

Body Parameters

sync_url_types   string[]   

The name of the Website. Example: Foobar

auto_update_settings   string[]   

The name of the Website. Example: Foobar

allowances   string   

The name of the Website. Example: Foobar

name   string   

The name of the Website. Example: Foobar