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
Add all URLs you might want to check. That’s all you need to do for this step.
Create Group
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)
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:
-
Take pre-update screenshots
Use POST
/api/v2/screenshots/take
. Send the parametersc_type = "pre"
and thegroup_ids
for which you want to take the screenshots. -
Wait for screenshots to finish
Wait for the
queue_finished
webhook to arrive. -
Install updates
Once the pre-update screenshots are done, perform your updates.
-
Take post-update screenshots
Use POST
/api/v2/screenshots/take
. This step is similar to Step 1, but you need to send the parametersc_type = "post"
. -
Wait for screenshots to finish
Wait for the
queue_finished
webhook to arrive. As soon as a change is detected, you will receive thecomparison_status_new
webhook. -
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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}"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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}"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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": []
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.