Page Monitoring Change Details
const url = 'https://sitechecker.pro/api/v1/page_monitoring_change_details?project_id=12345&url=example&change_id=example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://sitechecker.pro/api/v1/page_monitoring_change_details?project_id=12345&url=example&change_id=example' \ --header 'Authorization: Bearer <token>'Returns details for one selected Page Monitoring change, including Site Audit issue fields or Content Updates before/after and diff data depending on the change source.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
12345Project ID.
Page URL.
Selected page-level change id (from page_monitoring_changes).
Responses
Section titled “Responses”Change details
object
Site Audit fields are present for change_source=site_audit; event/diff fields for change_source=content.
object
Selected change ID.
Change source: site_audit / content.
Current crawl ID.
Previous crawl ID used for comparison, if available.
For Site Audit changes only.
For Site Audit changes only.
For Site Audit changes only.
For Site Audit changes only.
For Site Audit changes: added / removed.
For Content Updates only.
For Content Updates only. Before value for scalar changes; for text_content it is reconstructed from the diff (DELETE side); multiple sub-changes are joined; null when no scalar/diff (e.g. wp_plugin_added/removed). Capped at 10000 characters.
For Content Updates only. After value for scalar changes; for text_content it is reconstructed from the diff (INSERT side); multiple sub-changes are joined; null when no scalar/diff (e.g. wp_plugin_added/removed). Capped at 10000 characters.
For Content Updates with diff data, if available.
A single text/code diff chunk.
object
Example
{ "data": { "change_source": "site_audit", "crawl_id": "1782174402", "previous_crawl_id": "1782131199", "issue_id": 201, "direction": "added", "diff_chunks": [ { "text": "<div class=\"item\">", "operation": "EQUAL", "oldIndex": "11", "newIndex": "11" } ] }}Missing or invalid API key
object
object
Example
{ "error": { "code": "unauthorized", "message": "Invalid or missing API key." }}No active API entitlement for the account, or the project belongs to another account
Returned as api_access_denied when the account has no active API entitlement, and as forbidden when the requested project belongs to another account.
object
object
Example
{ "error": { "code": "api_access_denied", "message": "API access is not available: the account has no active API entitlement." }}Project or change not found
The exact missing resource is in error.code: project_not_found, segment_not_found, crawl_not_found, keyword_not_found, opportunity_not_found, snapshot_unavailable or not_found.
object
object
Example
{ "error": { "code": "project_not_found", "message": "Project not found." }}Validation error or invalid change_id
Rejected query parameters. error.code is validation_error for parameter validation, or invalid_date_range / invalid_filter / invalid_event_type / unsupported_filter / unsupported_dimension / unsupported_scope / segment_filter_unsupported for module-specific rules.
object
object
Example
{ "error": { "code": "validation_error", "message": "project_id is required." }}Rate limit exceeded — retry after the interval in the Retry-After header
object
object
Example
{ "error": { "code": "rate_limit_exceeded", "message": "Rate limit exceeded. Try again later." }}Internal server error
object
object
Example
{ "error": { "code": "internal_error", "message": "Internal server error." }}