Web tamper protection
Web tamper protection of one site: protected scopes (home page, pages, directories), what counts as tampering (structure only / any change), serving the baseline page or alerting only, and the observation period; baseline update and diff; part of WAF Enhanced.
site-tamper-guardsProtectionAuthentication: User (some parameters admin only)5 endpointsGet site web tamper protection settings
GET
/api/v2/site-tamper-guards/{site_id}Authentication: User (some parameters admin only)
Set site web tamper protection
PUT
/api/v2/site-tamper-guards/{site_id}Authentication: User (some parameters admin only)
Request body application/json
| Field | Type | Required | Description |
|---|---|---|---|
| action | string | — | Action on tampering. |
| enabled | boolean | Required | Whether enabled. |
| expected_updated_at | string | — | Optimistic lock - the updated_at as the caller read it (when null, i.e. never set, use 1970-01-01T00:00:00Z). If it differs from the stored one, 409 stale_version is returned and nothing is saved; omit to skip the check. |
| mode | string | — | What counts as tampering. |
| observe_days | integer | — | Days observed after turning on. |
| scopes | SiteTamperScope[] | — | Protected scopes. |
Restore site web tamper protection to the scheme
DELETE
/api/v2/site-tamper-guards/{site_id}Authentication: User (some parameters admin only)
Get site web tamper protection diff
GET
/api/v2/site-tamper-guards/{site_id}/diffAuthentication: User (some parameters admin only)
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| path | string | Required | Baseline page path (e.g. /, /about.html). |
Update site web tamper protection baseline
POST
/api/v2/site-tamper-guards/{site_id}/rebaseAuthentication: User (some parameters admin only)
Web tamper protection object
| Field | Type | Required | Description |
|---|---|---|---|
| action | string | — | Action on tampering. |
| assets | SiteTamperAsset[] | — | JS/CSS whose fingerprint differs (recorded only, not replaced). |
| base_at | string | — | Baseline time (the last baseline update). |
| base_ver | integer | — | Baseline version, +1 on every baseline update; 0 = no baseline yet. |
| changes | SiteTamperChange[] | — | Structural changes (removed links and text changes are not listed). |
| enabled | boolean | — | Whether enabled. |
| expected_updated_at | string | — | Optimistic lock - the updated_at as the caller read it (when null, i.e. never set, use 1970-01-01T00:00:00Z). If it differs from the stored one, 409 stale_version is returned and nothing is saved; omit to skip the check. |
| fetch_error | string | — | Why the page could not be fetched now (changes is then empty): fetch_failed = the origin did not return 200 or could not be reached; not_html = not a web page; too_large = over 1 MB. Absent when fetched. |
| gate | string | — | WAF Enhanced status of the site's tenant: full = editable; readonly = expired but within the read-only buffer (License.readonly_days, 7 days by default), still in effect but read-only; basic = not subscribed or past the buffer, nothing checked and settings kept. |
| gate_expired_at | string | — | Administrator responses with gate_reason=expired only - when the platform WAF Enhanced license expired; not present in tenant responses. |
| gate_owner | WafGateOwner | — | The owner of the site, in administrator responses only; tenant responses carry no one else's information. |
| gate_packages | string[] | — | Administrator responses only - names of the owner's unexpired packages (at most 20); not present in tenant responses. |
| gate_reason | WafGateReason | — | Why WAF Enhanced (waf_enhanced) is not in effect; absent when gate is full or readonly. package = the platform is licensed but the owner has no unexpired package that includes WAF Enhanced; license = the platform has not enabled it (never licensed, revoked by the provider, or the license was disabled); expired = the platform license has expired and its read-only buffer period (License.readonly_days, default 7 days) has passed, so it fell back to basic. |
| mode | string | — | What counts as tampering. |
| observe_days | integer | — | Days observed after turning on. |
| observe_until | string | — | End of the observation period; null = not observing (never on, or 0 days chosen). |
| pages | SiteTamperPage[] | — | Baseline pages (sorted by path), including scopes that were not included and why. |
| path | string | — | Page path. |
| scopes | SiteTamperScope[] | — | Protected scopes. |
| site_id | integer | — | Site ID |
| source | ProtectSiteSource | — | Where the site's setting comes from: scheme = follows the scheme (changes when the scheme is saved); custom = set for this site alone (including turned off and rows migrated from before). |
| tampered | boolean | — | Whether this counts as tampering under the site's mode. |
| updated_at | string | — | Version (null if never set); use expected_updated_at on update. |