## Web tamper protection page overview (`tamper-guard`)

All protected pages across sites (site, path, scope, baseline time, state, last change) without picking a site first; tenants see their own sites only and may filter by site.

Authentication: User (some parameters admin only) · Docs: https://www-demo.kuxitong.com/en/docs/api/tamper-guard

### GET `/api/v2/tamper-guard/pages`

List protected pages of all sites · Authentication: User (some parameters admin only)

Query parameters:

| Field | Type | Required | Description |
|---|---|---|---|
| `page` | integer |  | Page number, starting from 1 Default: 1 |
| `page_size` | integer |  | Items per page Default: 20 |
| `tenant_id` | integer |  | Admin only: filter by tenant. Ignored for tenant credentials, which only see their own tenant's data |
| `site_id` | integer |  | Only this site; an empty list when the site is not the caller's. |
| `q` | string |  | Fuzzy search by site domain or page path (case-insensitive). |
| `changed` | boolean |  | When true, only pages with a detected tampering (a non-empty last change). |

```sh
curl "https://panel.example.com/api/v2/tamper-guard/pages" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

Web tamper protection page overview object:

| Field | Type | Required | Description |
|---|---|---|---|
| `base_at` | string |  | When the site's baseline was last updated (whole site); null if never. |
| `domain` | string |  | Primary domain of the site (first in its domain list; the site name when it has none). |
| `enabled` | boolean |  | Whether tamper protection is switched on for the site; when off the pages are only a kept baseline and nothing is checked. |
| `gate` | string |  | WAF Enhanced status of the site's tenant: full = baseline can be updated; readonly and basic = cannot. Values: ["full","readonly","basic"] |
| `gate_expired_at` | string |  | Administrator responses with gate_reason=expired only - when the platform WAF Enhanced license expired; not present in tenant responses. (read-only) |
| `gate_owner` | WafGateOwner |  | The owner of the site, in administrator responses only; tenant responses carry no one else's information. (read-only) |
| `gate_packages` | string[] |  | Administrator responses only - names of the owner's unexpired packages (at most 20); not present in tenant responses. (read-only) |
| `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. Values: ["package","license","expired"] (read-only) |
| `kind` | string |  | Which kind of scope the page comes from. Values: ["home","page","dir"] |
| `last_change_action` | string |  | What the node did the last time: replace = served the baseline page; log = recorded only (including the observation period). Values: ["replace","log"] |
| `last_change_at` | string |  | When tampering was last detected; null = none since the baseline. |
| `last_change_summary` | string |  | Summary of the last change, e.g. link=bad.example.net, title. |
| `note` | string |  | Why the page is not in the baseline, same values as SiteTamperPage.note; absent for included pages. Values: ["too_large","site_limit","fetch_failed","not_html"] |
| `observe_until` | string |  | End of the site's tamper-protection observation period; set only while protection is on and observing (same as SiteTamperGuard.observe_until), null when off or never observing; an already-passed deadline is returned as is, the caller compares it with the current time. |
| `path` | string |  | Page path. |
| `site_id` | integer |  | Site id. |
| `size` | integer |  | Size of the baseline page in bytes. |
| `state` | string |  | Page state: normal; tampered = tampering detected since the baseline; excluded = not in the baseline (see note). Values: ["normal","tampered","excluded"] |
