MethodPathSummaryAuth
GET/v1/security/autodefense/blocksBan list entries with source autodefenseSession
POST/v1/security/autodefense/blocks/{block_id}/releaseUnblock (Lua and kernel), optionally whitelist and report a false positiveSession
GET/v1/security/autodefense/eventsAttack event timeline, newest firstSession
GET/v1/security/autodefense/false-positivesFalse positive reportsSession
POST/v1/security/autodefense/false-positivesReport a verdict or signature as a false positive (the signature is withdrawn at once)Session
GET/v1/security/autodefense/metricsPer site report figures of the last 30 days (mitigations, false positive reports, attack events)Session
GET/v1/security/autodefense/signaturesAutomatic rules (signatures)Session
POST/v1/security/autodefense/signatures/{signature_id}/revoke禁用此签名Session
POST/v1/security/autodefense/signatures/{signature_id}/solidify固化为我的规则: becomes a user WAF/CC rule and leaves automatic managementSession
GET/v1/security/autodefense/sitesSites with mode, baseline maturity, circuit, overlay and the auto-mitigation grantSession
POST/v1/security/autodefense/sites/modeBatch 开始学习 / 仅观察 / 开始防护 / 关闭 / 恢复跟随平台 (follow); protect needs module.autodefense.auto; one audit event per siteSession
GET/v1/security/autodefense/sites/{site_id}One site with its overlaySession
PATCH/v1/security/autodefense/sites/{site_id}Sensitivity and cross-site federation (revision guarded)Session
GET/v1/security/autodefense/sites/{site_id}/allows白名单: the site's allow list as the nodes get it (ACL allow rules = user, 解除并加白 = release, admin sign-in sources = admin_login); never mitigatedSession
POST/v1/security/autodefense/sites/{site_id}/allows/remove移出白名单: remove one 解除并加白 entry (ACL allows are edited in the ACL policy; admin sign-in sources expire)Session
POST/v1/security/autodefense/sites/{site_id}/circuit/resume恢复自动防护: close the site circuit the nodes reported open (Q6: a second break within 24 hours needs a person)Session
POST/v1/security/autodefense/sites/{site_id}/drifts/confirm确认基线漂移: confirm the site's pending baseline drifts (node baselines are not changed)Session
GET/v1/security/autodefense/sites/{site_id}/modulesModules site (site.max_level), bot, cc, scan, waf with every item state 自动/人工Session
GET/v1/security/autodefense/sites/{site_id}/modules/{module}/historyItem changes, newest first: node adjustments, 人工 locks, 恢复自动, range editsSession
PUT/v1/security/autodefense/sites/{site_id}/modules/{module}/items/{field}A person sets the item: it becomes manual and runs on this value until resumed (Q3)Session
PUT/v1/security/autodefense/sites/{site_id}/modules/{module}/items/{field}/rangeNarrow the item's automatic range (上下限); state and manual value unchangedSession
POST/v1/security/autodefense/sites/{site_id}/modules/{module}/items/{field}/resume恢复自动 for one itemSession
PUT/v1/security/autodefense/sites/{site_id}/modules/{module}/modemanual / auto / suggest; auto needs module.autodefense.autoSession
POST/v1/security/autodefense/sites/{site_id}/modules/{module}/resume全部恢复自动: every manual item of the module returns to automaticSession
GET/v1/security/autodefense/sites/{site_id}/modules/{module}/valuesEach node's newest value of every item (in force or suggested) and its reasonSession
POST/v1/security/autodefense/sites/{site_id}/release一键解除: undo every automatic mitigation and hold the site in observe only (default 30 minutes)Session
POST/v1/security/autodefense/sites/{site_id}/releases/retry重试: every serving node applies and answers the release again (retry + 1, at most 100; audited release_retry)Session
GET/v1/security/autodefense/sites/{site_id}/releases/status解除状态: per node delivery of the site's single release of one target (已保存 → 待节点 → 全部节点已生效 / 部分失败)Session
GET/v1/security/autodefense/sites/{site_id}/waf-adaptAdaptive WAF (智能自动): exclusions by stage with merged evidence, typed parameters, grey zone challenge, rule adviceSession
POST/v1/security/autodefense/sites/{site_id}/waf-adapt/exclusions/{exclusion_id}/{action}A person's decision: adopt (采纳, a manual exclusion), reject (驳回), revoke (撤销), manual (设为人工), resume (恢复自动); module.autodefense onlySession
PUT/v1/security/autodefense/sites/{site_id}/waf-adapt/grey-challengeGrey zone challenge inherit / on / off (only 严格 / 极严格 tiers challenge)Session
PUT/v1/security/autodefense/sites/{site_id}/waf-adapt/grey-repeatRepeated grey zone source threshold / window of the site (null = node defaults 20 / 60 s)Session
GET/v1/security/autodefense/verdictsRecent individual verdictsSession
POST/v1/security/autodefense/verdicts/{verdict_id}/release解除 / 解除并加白 / 标记误判Session
GET/v1/security/cc-statsRead the CC rule statistics of a site of the session tenantSession
GET/v1/security/escalate/sites/{site_id}Read a site's attack escalation settings, thresholds in force and stateSession
PUT/v1/security/escalate/sites/{site_id}Switch attack escalation on or off for a site and set its thresholds inside the package rangesSession
POST/v1/security/escalate/sites/{site_id}/cname-changedConfirm the site's domain now points at the CNAME split off for escalationSession
GET/v1/security/escalate/sites/{site_id}/eventsList a site's level history, newest first (100 rows)Session
POST/v1/security/ja4-blocksCreate a tenant-scoped JA4 block from one authoritative ranking snapshotSession
GET/v1/security/ja4-blocks/{workflow_id}Get fixed JA4 block policy, binding, publication, and rollout stateSession

Contract file:api/control-autodefense.openapi.yaml api/control-cc-stats.openapi.yaml api/control-escalate.openapi.yaml api/control-ja4-block.openapi.yaml

Operation details

GET /v1/security/autodefense/blocks

Ban list entries with source autodefense

operationId
listAutoDefenseBlocks
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseBlocks Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idquerystring(uuid)No—
ipqueryany | anyNo—
limitqueryintegerNo—

Responses

listAutoDefenseBlocks Responses
StatusDescription
200Ban list entries with source autodefense.

Fields:items: array<BlockEntry>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/blocks/{block_id}/release

Unblock (Lua and kernel), optionally whitelist and report a false positive

operationId
releaseAutoDefenseBlock
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

releaseAutoDefenseBlock Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
block_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

releaseAutoDefenseBlock Request body
NameTypeRequiredDescription
whitelistbooleanNo解除并加白 (IP
allow_untilobjectNoWhen the 解除并加白 entry expires (absent = permanent; only with whitelist; after now and within 365 days). An entry already listed keeps the longer expiry.
false_positivebooleanNo标记误判; reason is then required and a false_positive_report is audited.
reasonstringNo—

Responses

releaseAutoDefenseBlock Responses
StatusDescription
200What the release undid.

Fields:site_id: string(uuid) released_targets: array<string> shadowed_signatures: array<string> whitelisted: array<string> allows: array<SiteAllow> observe_until?: string(date-time) false_positive_id?: string(uuid)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/events

Attack event timeline, newest first

operationId
listAutoDefenseEvents
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseEvents Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idquerystring(uuid)No—
limitqueryintegerNo—

Responses

listAutoDefenseEvents Responses
StatusDescription
200Attack events.

Fields:items: array<Event>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/false-positives

False positive reports

operationId
listAutoDefenseFalsePositives
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseFalsePositives Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idquerystring(uuid)No—
limitqueryintegerNo—

Responses

listAutoDefenseFalsePositives Responses
StatusDescription
200False positive reports.

Fields:items: array<FalsePositive>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/false-positives

Report a verdict or signature as a false positive (the signature is withdrawn at once)

operationId
reportAutoDefenseFalsePositive
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

reportAutoDefenseFalsePositive Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.

Request body

application/json · Required:Yes

reportAutoDefenseFalsePositive Request body
NameTypeRequiredDescription
site_idstring(uuid)Yes—
verdict_idstring(uuid)No—
signature_idstringNo—
reasonobjectYes—

Responses

reportAutoDefenseFalsePositive Responses
StatusDescription
201The recorded report.

Fields:id: string(uuid) site_id: string(uuid) tenant_scope_id: string(uuid) verdict_id?: string(uuid) block_id?: string(uuid) signature_id?: string target?: string reason: string reported_by: string created_at: string(date-time)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/metrics

Per site report figures of the last 30 days (mitigations, false positive reports, attack events)

operationId
listAutoDefenseSiteMetrics
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseSiteMetrics Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.

Responses

listAutoDefenseSiteMetrics Responses
StatusDescription
200Report figures per live site of the tenant (at most 500).

Fields:items: array<SiteMetrics>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/signatures

Automatic rules (signatures)

operationId
listAutoDefenseSignatures
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseSignatures Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idquerystring(uuid)No—
limitqueryintegerNo—

Responses

listAutoDefenseSignatures Responses
StatusDescription
200Automatic rules.

Fields:items: array<Signature>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/signatures/{signature_id}/revoke

禁用此签名

operationId
revokeAutoDefenseSignature
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

revokeAutoDefenseSignature Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
signature_idpathstringYesSHA-256 of the canonical conditions, first 16 hex digits (contract 3.4).

Request body

application/json · Required:No

Responses

revokeAutoDefenseSignature Responses
StatusDescription
200One automatic rule.

Fields:id: string site_id: string(uuid) tenant_scope_id: string(uuid) conditions: array<object> stage: string: shadow / challenge / block / standby cover_permille: integer fpr_ppm: integer hits: integer reason: string managed: boolean solidified_kind?: string: waf / cc solidified_rule_id?: string(uuid) solidified_pack_id?: string solidified_version?: string revoked: boolean origin: string: node / control origin_node_id?: string(uuid) evaluation: object scope: string: site / tenant / none created_at: string(date-time)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/signatures/{signature_id}/solidify

固化为我的规则: becomes a user WAF/CC rule and leaves automatic management

operationId
solidifyAutoDefenseSignature
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Description (from the contract)

Writes the signature as the tenant's user-layer rule pack user/<tenant>/autodefense-<id> (one rule: waf block or cc JS challenge), enables it on the site and publishes the site's rule pack mounts with the three-layer conflict check. 409 autodefense_rule_conflict: the pack conflicts with the site's other enabled packs (nothing is written); 422 autodefense_not_compilable: a condition a user rule cannot match (ua, header order, behaviour buckets; cc has no JA4 / IP library match). The automatic signature is then withdrawn from every node.

Parameters

solidifyAutoDefenseSignature Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
signature_idpathstringYesSHA-256 of the canonical conditions, first 16 hex digits (contract 3.4).

Request body

application/json · Required:Yes

solidifyAutoDefenseSignature Request body
NameTypeRequiredDescription
kindstring: waf / ccYes—

Responses

solidifyAutoDefenseSignature Responses
StatusDescription
200One automatic rule.

Fields:id: string site_id: string(uuid) tenant_scope_id: string(uuid) conditions: array<object> stage: string: shadow / challenge / block / standby cover_permille: integer fpr_ppm: integer hits: integer reason: string managed: boolean solidified_kind?: string: waf / cc solidified_rule_id?: string(uuid) solidified_pack_id?: string solidified_version?: string revoked: boolean origin: string: node / control origin_node_id?: string(uuid) evaluation: object scope: string: site / tenant / none created_at: string(date-time)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites

Sites with mode, baseline maturity, circuit, overlay and the auto-mitigation grant

operationId
listAutoDefenseSites
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseSites Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
limitqueryintegerNo—

Responses

listAutoDefenseSites Responses
StatusDescription
200Sites of the tenant.

Fields:items: array<Site> auto_mitigation_granted: boolean

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/mode

Batch 开始学习 / 仅观察 / 开始防护 / 关闭 / 恢复跟随平台 (follow); protect needs module.autodefense.auto; one audit event per site

operationId
setAutoDefenseSiteModes
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense module.autodefense.auto

Parameters

setAutoDefenseSiteModes Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.

Request body

application/json · Required:Yes

setAutoDefenseSiteModes Request body
NameTypeRequiredDescription
site_idsarray<string(uuid)>Yes—
modestring: off / learning / observe / protect / followYesThe site's own mode; follow = 跟随平台 (the site takes the platform default_mode and changes with it).
confirmbooleanYesBatch operations need an explicit confirmation.

Responses

setAutoDefenseSiteModes Responses
StatusDescription
200The sites and their mode before and after.

Fields:items: array<object>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites/{site_id}

One site with its overlay

operationId
getAutoDefenseSite
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

getAutoDefenseSite Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Responses

getAutoDefenseSite Responses
StatusDescription
200One site with the snapshot delivery state of every node serving it.

Fields:site_id: string(uuid) tenant_scope_id: string(uuid) domain: string tenant_name: string state: string: normal / surge / protect_origin / attack / cooldown / circuit_open / baseline_stale current_level: integer last_event_reason?: string mode: string: off / learning / observe / protect follow_platform: boolean sensitivity: string: low / medium / high maturity: string: prior / hour / day / week cross_site: boolean circuit: Circuit observe_until?: string(date-time) last_event_at?: string(date-time) revision: integer updated_at: string(date-time) auto_mitigation_granted: boolean overlay: string: active / frozen / inactive max_level: Item modules: array<Module> drifts?: array<Drift> nodes: array<SiteNode> unsupported_nodes: array<string>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

PATCH /v1/security/autodefense/sites/{site_id}

Sensitivity and cross-site federation (revision guarded)

operationId
updateAutoDefenseSite
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

updateAutoDefenseSite Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

updateAutoDefenseSite Request body
NameTypeRequiredDescription
sensitivitystring: low / medium / highNo—
cross_sitebooleanNo—
revisionintegerYes—

Responses

updateAutoDefenseSite Responses
StatusDescription
200One site.

Fields:site_id: string(uuid) tenant_scope_id: string(uuid) domain: string tenant_name: string state: string: normal / surge / protect_origin / attack / cooldown / circuit_open / baseline_stale current_level: integer last_event_reason?: string mode: string: off / learning / observe / protect follow_platform: boolean sensitivity: string: low / medium / high maturity: string: prior / hour / day / week cross_site: boolean circuit: Circuit observe_until?: string(date-time) last_event_at?: string(date-time) revision: integer updated_at: string(date-time) auto_mitigation_granted: boolean overlay: string: active / frozen / inactive max_level: Item modules: array<Module> drifts?: array<Drift>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites/{site_id}/allows

白名单: the site's allow list as the nodes get it (ACL allow rules = user, 解除并加白 = release, admin sign-in sources = admin_login); never mitigated

operationId
listAutoDefenseSiteAllows
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseSiteAllows Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Responses

listAutoDefenseSiteAllows Responses
StatusDescription
200The site's allow list in CIDR order.

Fields:items: array<SiteAllow>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/allows/remove

移出白名单: remove one 解除并加白 entry (ACL allows are edited in the ACL policy; admin sign-in sources expire)

operationId
removeAutoDefenseSiteAllow
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

removeAutoDefenseSiteAllow Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

removeAutoDefenseSiteAllow Request body
NameTypeRequiredDescription
cidrstringNoThe 解除并加白 entry (IP address or network).
ja4stringNoThe 解除并加白 entry (JA4 fingerprint).

Responses

removeAutoDefenseSiteAllow Responses
StatusDescription
200The removed allow list entry.

Fields:cidr?: string ja4?: string source: string: user / release / admin_login until?: string(date-time) created_by?: string created_at?: string(date-time)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/circuit/resume

恢复自动防护: close the site circuit the nodes reported open (Q6: a second break within 24 hours needs a person)

operationId
resumeAutoDefenseSiteCircuit
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense module.autodefense.auto

Parameters

resumeAutoDefenseSiteCircuit Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:No

Responses

resumeAutoDefenseSiteCircuit Responses
StatusDescription
200One site.

Fields:site_id: string(uuid) tenant_scope_id: string(uuid) domain: string tenant_name: string state: string: normal / surge / protect_origin / attack / cooldown / circuit_open / baseline_stale current_level: integer last_event_reason?: string mode: string: off / learning / observe / protect follow_platform: boolean sensitivity: string: low / medium / high maturity: string: prior / hour / day / week cross_site: boolean circuit: Circuit observe_until?: string(date-time) last_event_at?: string(date-time) revision: integer updated_at: string(date-time) auto_mitigation_granted: boolean overlay: string: active / frozen / inactive max_level: Item modules: array<Module> drifts?: array<Drift>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/drifts/confirm

确认基线漂移: confirm the site's pending baseline drifts (node baselines are not changed)

operationId
confirmAutoDefenseSiteDrifts
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

confirmAutoDefenseSiteDrifts Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:No

Responses

confirmAutoDefenseSiteDrifts Responses
StatusDescription
200The drifts the confirmation changed (empty when none was pending).

Fields:items: array<Drift>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites/{site_id}/modules

Modules site (site.max_level), bot, cc, scan, waf with every item state 自动/人工

operationId
listAutoDefenseSiteModules
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseSiteModules Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Responses

listAutoDefenseSiteModules Responses
StatusDescription
200Modules with their items.

Fields:items: array<Module> auto_mitigation_granted: boolean overlay: string: active / frozen / inactive

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites/{site_id}/modules/{module}/history

Item changes, newest first: node adjustments, 人工 locks, 恢复自动, range edits

operationId
listAutoDefenseSiteModuleHistory
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseSiteModuleHistory Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
modulepathstring: site / bot / cc / scan / wafYessite holds the single item site.max_level (no module mode).
limitqueryintegerNo—

Responses

listAutoDefenseSiteModuleHistory Responses
StatusDescription
200Item changes, newest first.

Fields:items: array<HistoryEntry>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

PUT /v1/security/autodefense/sites/{site_id}/modules/{module}/items/{field}

A person sets the item: it becomes manual and runs on this value until resumed (Q3)

operationId
lockAutoDefenseSiteItem
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

lockAutoDefenseSiteItem Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
modulepathstring: site / bot / cc / scan / wafYessite holds the single item site.max_level (no module mode).
fieldpathstringYesA field of the frozen registry of the module; waf.group:<slug> per rule group.

Request body

application/json · Required:Yes

lockAutoDefenseSiteItem Request body
NameTypeRequiredDescription
valueintegerYesWithin the field platform range; enum fields take the ordinal, bool 0 or 1.

Responses

lockAutoDefenseSiteItem Responses
StatusDescription
200The locked item.

Fields:field: string kind: string: int / enum / bool unit?: string enum?: array<string> state: string: auto / manual manual: integer auto?: integer min: integer max: integer platform_min: integer platform_max: integer effective: integer suggestion?: integer locked_by?: string locked_at?: string(date-time) resumed_by?: string resumed_at?: string(date-time) frozen_until?: string(date-time)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

PUT /v1/security/autodefense/sites/{site_id}/modules/{module}/items/{field}/range

Narrow the item's automatic range (上下限); state and manual value unchanged

operationId
setAutoDefenseSiteItemRange
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

setAutoDefenseSiteItemRange Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
modulepathstring: site / bot / cc / scan / wafYessite holds the single item site.max_level (no module mode).
fieldpathstringYesA field of the frozen registry of the module; waf.group:<slug> per rule group.

Request body

application/json · Required:Yes

setAutoDefenseSiteItemRange Request body
NameTypeRequiredDescription
minintegerYesWithin the field platform range, min <= max; bound to the manual value as the field requires.
maxintegerYes—

Responses

setAutoDefenseSiteItemRange Responses
StatusDescription
200The locked item.

Fields:field: string kind: string: int / enum / bool unit?: string enum?: array<string> state: string: auto / manual manual: integer auto?: integer min: integer max: integer platform_min: integer platform_max: integer effective: integer suggestion?: integer locked_by?: string locked_at?: string(date-time) resumed_by?: string resumed_at?: string(date-time) frozen_until?: string(date-time)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/modules/{module}/items/{field}/resume

恢复自动 for one item

operationId
resumeAutoDefenseSiteItem
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense module.autodefense.auto

Parameters

resumeAutoDefenseSiteItem Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
modulepathstring: site / bot / cc / scan / wafYessite holds the single item site.max_level (no module mode).
fieldpathstringYesA field of the frozen registry of the module; waf.group:<slug> per rule group.

Request body

application/json · Required:No

Responses

resumeAutoDefenseSiteItem Responses
StatusDescription
200Items that changed (empty when nothing was manual).

Fields:items: array<Item>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

PUT /v1/security/autodefense/sites/{site_id}/modules/{module}/mode

manual / auto / suggest; auto needs module.autodefense.auto

operationId
setAutoDefenseSiteModuleMode
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense module.autodefense.auto

Parameters

setAutoDefenseSiteModuleMode Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
modulepathstring: site / bot / cc / scan / wafYessite holds the single item site.max_level (no module mode).

Request body

application/json · Required:Yes

setAutoDefenseSiteModuleMode Request body
NameTypeRequiredDescription
modestring: manual / auto / suggestYes—

Responses

setAutoDefenseSiteModuleMode Responses
StatusDescription
200The module mode now in force.

Fields:module: string mode: string: manual / auto / suggest

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/modules/{module}/resume

全部恢复自动: every manual item of the module returns to automatic

operationId
resumeAutoDefenseSiteModule
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense module.autodefense.auto

Parameters

resumeAutoDefenseSiteModule Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
modulepathstring: site / bot / cc / scan / wafYessite holds the single item site.max_level (no module mode).

Request body

application/json · Required:No

Responses

resumeAutoDefenseSiteModule Responses
StatusDescription
200Items that changed (empty when nothing was manual).

Fields:items: array<Item>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites/{site_id}/modules/{module}/values

Each node's newest value of every item (in force or suggested) and its reason

operationId
listAutoDefenseSiteModuleValues
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseSiteModuleValues Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
modulepathstring: site / bot / cc / scan / wafYessite holds the single item site.max_level (no module mode).

Responses

listAutoDefenseSiteModuleValues Responses
StatusDescription
200Each node's newest value per item.

Fields:items: array<NodeValue>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/release

一键解除: undo every automatic mitigation and hold the site in observe only (default 30 minutes)

operationId
releaseAutoDefenseSite
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

releaseAutoDefenseSite Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

releaseAutoDefenseSite Request body
NameTypeRequiredDescription
observe_minutesintegerNo0 = no observe-only hold.
reasonstringNo—

Responses

releaseAutoDefenseSite Responses
StatusDescription
200What the release undid.

Fields:site_id: string(uuid) released_targets: array<string> shadowed_signatures: array<string> whitelisted: array<string> allows: array<SiteAllow> observe_until?: string(date-time) false_positive_id?: string(uuid)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/releases/retry

重试: every serving node applies and answers the release again (retry + 1, at most 100; audited release_retry)

operationId
retryAutoDefenseRelease
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

retryAutoDefenseRelease Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

retryAutoDefenseRelease Request body
NameTypeRequiredDescription
kindstring: ip / cidr / ja4Yes—
targetstringYes—

Responses

retryAutoDefenseRelease Responses
StatusDescription
200The per node delivery of a single release.

Fields:site_id: string(uuid) kind: string: ip / cidr / ja4 target: string released_at: string(date-time) retry: integer state: string: pending / applied / partial_failed / no_nodes nodes: array<object>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites/{site_id}/releases/status

解除状态: per node delivery of the site's single release of one target (已保存 → 待节点 → 全部节点已生效 / 部分失败)

operationId
getAutoDefenseReleaseStatus
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

getAutoDefenseReleaseStatus Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
kindquerystring: ip / cidr / ja4Yes—
targetquerystringYes—

Responses

getAutoDefenseReleaseStatus Responses
StatusDescription
200The per node delivery of a single release.

Fields:site_id: string(uuid) kind: string: ip / cidr / ja4 target: string released_at: string(date-time) retry: integer state: string: pending / applied / partial_failed / no_nodes nodes: array<object>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/sites/{site_id}/waf-adapt

Adaptive WAF (智能自动): exclusions by stage with merged evidence, typed parameters, grey zone challenge, rule advice

operationId
getAutoDefenseSiteWAFAdapt
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:waf_adapt.read

Required features:module.autodefense

Parameters

getAutoDefenseSiteWAFAdapt Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Responses

getAutoDefenseSiteWAFAdapt Responses
StatusDescription
200The site's adaptive WAF state.

Fields:site_id: string(uuid) runtime: object automatic: boolean auto_granted: boolean waf_mode: string: manual / auto / suggest frozen: boolean grey_challenge: object grey_repeat: object revision: integer evaluated_at: string(date-time) | null settings: object exclusions: array<WAFExclusion> typed_params: array<object> rule_advice: array<object> limits: object node_limits: array<object>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/sites/{site_id}/waf-adapt/exclusions/{exclusion_id}/{action}

A person's decision: adopt (采纳, a manual exclusion), reject (驳回), revoke (撤销), manual (设为人工), resume (恢复自动); module.autodefense only

operationId
decideAutoDefenseSiteWAFExclusion
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:waf_adapt.manage

Required features:module.autodefense

Parameters

decideAutoDefenseSiteWAFExclusion Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—
exclusion_idpathstringYesWAFExclusionID (SHA-256 of "<rule>:<loc>:<name>", first 16 hex digits).
actionpathstring: adopt / reject / revoke / manual / resumeYes—

Request body

application/json · Required:No

Responses

decideAutoDefenseSiteWAFExclusion Responses
StatusDescription
200The exclusion after the decision.

Fields:id: string rule: integer rule_set: string rule_set_name: string param: object stage: string: candidate / shadow / suggested / active / rejected stage_since: string(date-time) until: string(date-time) | null manual: string: none / exclude / keep manual_by: string | null manual_at: string(date-time) | null rejections: integer reject_reason: string: false_positive / attack / unneeded | null permanent: boolean cooldown_until: string(date-time) | null value_type: string: number / ident / text / json / binary / url len_bucket: integer evidence: object flipped: integer flipped_attack: integer first_seen: string(date-time) last_seen: string(date-time)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

PUT /v1/security/autodefense/sites/{site_id}/waf-adapt/grey-challenge

Grey zone challenge inherit / on / off (only 严格 / 极严格 tiers challenge)

operationId
setAutoDefenseSiteGreyChallenge
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:waf_adapt.manage

Required features:module.autodefense

Parameters

setAutoDefenseSiteGreyChallenge Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

setAutoDefenseSiteGreyChallenge Request body
NameTypeRequiredDescription
valuestring: inherit / on / offYes—

Responses

setAutoDefenseSiteGreyChallenge Responses
StatusDescription
200The grey zone challenge before and after.

Fields:before: string: inherit / on / off value: string: inherit / on / off

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

PUT /v1/security/autodefense/sites/{site_id}/waf-adapt/grey-repeat

Repeated grey zone source threshold / window of the site (null = node defaults 20 / 60 s)

operationId
setAutoDefenseSiteGreyRepeat
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:waf_adapt.manage

Required features:module.autodefense

Description (from the contract)

Only nodes declaring CAPABILITY_NAME_WAF_REPEAT_SITE use the site value; other nodes keep the defaults.

Parameters

setAutoDefenseSiteGreyRepeat Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

setAutoDefenseSiteGreyRepeat Request body
NameTypeRequiredDescription
valueGreyRepeat | nullYes—

Responses

setAutoDefenseSiteGreyRepeat Responses
StatusDescription
200The repeat setting before and after (null = node defaults).

Fields:before: GreyRepeat | null value: GreyRepeat | null

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/autodefense/verdicts

Recent individual verdicts

operationId
listAutoDefenseVerdicts
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Required features:module.autodefense

Parameters

listAutoDefenseVerdicts Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
site_idquerystring(uuid)No—
ipqueryany | anyNo—
limitqueryintegerNo—

Responses

listAutoDefenseVerdicts Responses
StatusDescription
200Verdicts.

Fields:items: array<Verdict>

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

POST /v1/security/autodefense/verdicts/{verdict_id}/release

解除 / 解除并加白 / 标记误判

operationId
releaseAutoDefenseVerdict
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.autodefense

Parameters

releaseAutoDefenseVerdict Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoEchoed in X-Request-ID and error.request_id; generated when absent.
verdict_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

releaseAutoDefenseVerdict Request body
NameTypeRequiredDescription
whitelistbooleanNo解除并加白 (IP
allow_untilobjectNoWhen the 解除并加白 entry expires (absent = permanent; only with whitelist; after now and within 365 days). An entry already listed keeps the longer expiry.
false_positivebooleanNo标记误判; reason is then required and a false_positive_report is audited.
reasonstringNo—

Responses

releaseAutoDefenseVerdict Responses
StatusDescription
200What the release undid.

Fields:site_id: string(uuid) released_targets: array<string> shadowed_signatures: array<string> whitelisted: array<string> allows: array<SiteAllow> observe_until?: string(date-time) false_positive_id?: string(uuid)

defaultErrorEnvelope; entitlement_feature_denied carries error.capability.feature.

↑ Back to list

GET /v1/security/cc-stats

Read the CC rule statistics of a site of the session tenant

operationId
getSiteCCStats
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Parameters

getSiteCCStats Parameters
NameInTypeRequiredDescription
site_idquerystring(uuid)Yes—
rangequerystring: 1h / 6h / 24hNo1h (1 minute steps, default), 6h (5 minutes) or 24h (15 minutes).

Responses

getSiteCCStats Responses
StatusDescription
200The site's CC rule statistics.

Fields:tenant_scope_id: string(uuid) range: string: 1h / 6h / 24h site_id: string(uuid) from: string(date-time) to: string(date-time) step_seconds: integer: 60 / 300 / 900 series: array<object> rules: array<object> top_clients: array<Top> top_paths: array<Top>

400Error.
401Error.
403Error.
404Error.
405Error.
503Error.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/security/escalate/sites/{site_id}

Read a site's attack escalation settings, thresholds in force and state

operationId
getEscalateSite
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Parameters

getEscalateSite Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

getEscalateSite Responses
StatusDescription
200The site's settings, its package's ranges, the thresholds in force and its state.

Fields:settings: object policy: Policy effective: object state: State

400Error.
401Error.
403Error.
404Error.
409Error.
503Error.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

PUT /v1/security/escalate/sites/{site_id}

Switch attack escalation on or off for a site and set its thresholds inside the package ranges

operationId
putEscalateSite
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.escalate

Parameters

putEscalateSite Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

putEscalateSite Request body
NameTypeRequiredDescription
enabledbooleanYes—
thresholdsSiteThresholdsYes—
revisioninteger(int64)Yes—

Responses

putEscalateSite Responses
StatusDescription
200The site's settings, its package's ranges, the thresholds in force and its state.

Fields:settings: object policy: Policy effective: object state: State

400Error.
401Error.
403Error.
404Error.
409Error.
422Error.
503Error.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/security/escalate/sites/{site_id}/cname-changed

Confirm the site's domain now points at the CNAME split off for escalation

operationId
confirmEscalateCNAMEChange
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Required features:module.escalate

Description (from the contract)

A site on a package-mode (shared) CNAME gets a site-mode CNAME at its first escalation; until the owner points the domain at it the site's state shows pending_reason cname_change_required.

Parameters

confirmEscalateCNAMEChange Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

confirmEscalateCNAMEChange Responses
StatusDescription
200Whether a confirmation was recorded, and the site.

Fields:recorded: boolean site: SiteResponse

400Error.
401Error.
403Error.
404Error.
409Error.
503Error.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/security/escalate/sites/{site_id}/events

List a site's level history, newest first (100 rows)

operationId
listEscalateSiteEvents
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Parameters

listEscalateSiteEvents Parameters
NameInTypeRequiredDescription
site_idpathstring(uuid)Yes—

Responses

listEscalateSiteEvents Responses
StatusDescription
200Level history, newest first.

Fields:items: array<Event>

400Error.
401Error.
403Error.
404Error.
503Error.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/security/ja4-blocks

Create a tenant-scoped JA4 block from one authoritative ranking snapshot

operationId
createTenantJA4BlockWorkflow
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.manage

Parameters

createTenantJA4BlockWorkflow Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNo—
Idempotency-KeyheaderstringYes—
If-MatchheaderstringYes—
X-Step-Up-TokenheaderstringYesSingle-use proof consumed by the configured step-up verifier; never persisted.

Request body

application/json · Required:Yes

createTenantJA4BlockWorkflow Request body
NameTypeRequiredDescription
site_idstring(uuid)Yes—
ja4stringYes—
snapshot_atstring(date-time)Yes—
duration_secondsintegerYes—
reasonstringYes—

Responses

createTenantJA4BlockWorkflow Responses
StatusDescription
202Durable workflow created or exact idempotent replay returned.

Fields:id: string(uuid) tenant_scope_id: string(uuid) site_id: string(uuid) ja4_sha256: string snapshot_at: string(date-time) duration_seconds: integer reason: string phase: string: queued / policy_ready / edge_pending / active / failed / expired revision: integer policy_id?: string(uuid) policy_revision?: integer binding_id?: string(uuid) binding_revision?: integer edge_publication_id?: string(uuid) rollout_id: string(uuid) edge_state: string: / pending / active / failed / rolled_back attempt_count: integer last_error_code?: string replayed?: boolean

400Stable error response.
401Stable error response.
403Stable error response.
409Stable error response.
412Stable error response.
428Stable error response.
503Stable error response.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 412 The revision changed: read the latest ETag, decide again, then send the new If-Match.
  • 428 A precondition is missing: read the resource and send If-Match (or the required proof).
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/security/ja4-blocks/{workflow_id}

Get fixed JA4 block policy, binding, publication, and rollout state

operationId
getTenantJA4BlockWorkflow
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:security_policies.read

Parameters

getTenantJA4BlockWorkflow Parameters
NameInTypeRequiredDescription
workflow_idpathstring(uuid)Yes—
X-Request-IDheaderstringNo—

Responses

getTenantJA4BlockWorkflow Responses
StatusDescription
200Fixed workflow state; raw access events are never returned.

Fields:id: string(uuid) tenant_scope_id: string(uuid) site_id: string(uuid) ja4_sha256: string snapshot_at: string(date-time) duration_seconds: integer reason: string phase: string: queued / policy_ready / edge_pending / active / failed / expired revision: integer policy_id?: string(uuid) policy_revision?: integer binding_id?: string(uuid) binding_revision?: integer edge_publication_id?: string(uuid) rollout_id: string(uuid) edge_state: string: / pending / active / failed / rolled_back attempt_count: integer last_error_code?: string replayed?: boolean

401Stable error response.
403Stable error response.
404Stable error response.
503Stable error response.

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list