Content Updates Changed Pages
const url = 'https://sitechecker.pro/api/v1/content_updates?project_id=12345&crawl_id=1782174402&segment_id=all_pages&limit=50&offset=0';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/content_updates?project_id=12345&crawl_id=1782174402&segment_id=all_pages&limit=50&offset=0' \ --header 'Authorization: Bearer <token>'Returns Content Updates events for one crawl, including affected page URLs, event types, and basic before/after values when available.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
12345Project ID.
Example
1782174402Monitoring run identifier — the run UNIX timestamp (seconds, UTC). Treat it as an opaque token: take it verbatim from a summary endpoint’s points[].crawl_id.
Example
all_pagesOptional segment scope filter.
Optional Content Update event filter.
Optional exact page URL filter.
Page size.
Pagination offset.
Responses
Section titled “Responses”Paginated content update events
object
object
Unique content update/change ID used for details endpoint.
Page URL where the content event happened.
Content event type.
Human-readable event name.
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.
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.
Whether detailed before/after or diff data is available.
object
Reusable OpenAPI response schemas for the Public REST API: the error/meta envelope and one item schema per resource. Property names come from the Field registry so the documented contract and the runtime response shapes stay in lock-step.
Example
{ "data": [ { "content_update_id": "eyJzIjoiY29udGVudCJ9", "url": "https://example.com/free-seo-tools/", "event_type": "text_content", "event_name": "Text content", "has_details": true } ], "meta": { "total": 137, "limit": 50, "offset": 0 }}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, segment or crawl 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 filter
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." }}