hosting
PUT /v1/sites/{siteId}/cdn/security
Change a site's CDN security and bot settings.
인증
Bearer 토큰으로 API 키를 전송하세요. 키는 반드시 hosting.cdn.manage 권한을 가지고 있어야 하며, 권한이 없는 키는 404가 아닌 403으로 거부됩니다.
이 엔드포인트는 조직 ID를 받지 않습니다. 사용자의 키가 이미 속한 조직을 식별하며, 응답은 해당 조직으로 한정됩니다.
무료 체험하기
대괄호 안에 있는 모든 내용을 사용자 지정 값으로 바꾸고, 키 플레이스홀더는 대시보드의 키로 바꾸세요.
curl -X PUT https://api.zinndigital.com/v1/sites/{siteId}/cdn/security \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ }'로그인하셨나요? 대시보드의 API 콘솔이 실제 조직 ID와 본인의 키를 자동으로 채우고 라이브 API를 대상으로 요청을 실행하므로 실제 응답을 확인할 수 있습니다. API 콘솔에서 이 엔드포인트를 여세요
상세 정보
A **merge**: only the fields present are changed. A full-object write would turn a customer's AI-crawler policy off every time they changed their security level. The body carries settings and nothing else — `additionalProperties: false`, for the reason `PUT /v1/sites/{siteId}/cdn/settings` gives: these are pooled CDN accounts and a Cloudflare zone resolves by name alone, so a body key named `domain` or `zone_id` must be refused rather than discarded. The result is read back from the provider rather than echoed, because the provider silently ignores a bot control a zone's plan does not include — "we asked" and "it changed" are different facts. Requires `hosting.cdn.manage`. **Bot management is a sold entitlement (`protection_tier`).** Turning `bot_fight_mode` on, or setting `ai_bots_protection`/`crawler_protection` to `block` or `managed_challenge`, needs a plan that includes it and otherwise answers a plan refusal naming the tier held and the tier needed. Three things are deliberately NOT gated. Turning any control **off** is free on every plan — a customer whose plan changed must always be able to reach the floor rather than be stranded with a setting they cannot undo. `allow` is an explicit relaxation, not protection, so it is free too. And `security_level: under_attack` is free on every plan, for ever: it is the emergency DDoS response, and refusing it to a customer under active attack because of their plan is not a product decision this platform will make.
매개변수
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
siteId (path) | Uuid | 예 | Site ID (UUIDv7). |
요청 본문
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
security_level | CdnSecurityLevel | 아니요 | The provider's own security-level vocabulary, passed through. **Not ordered the way it reads** — `essentially_off` sits between `off` and `low` — so nothing may treat it as a sc… |
bot_fight_mode | boolean | 아니요 | — |
ai_bots_protection | CdnAiBotMode | 아니요 | How the edge treats AI crawlers. `disabled` leaves them alone. This is the control on the screen most able to cost a site traffic, in either direction: blocking AI answer engine… |
crawler_protection | CdnAiBotMode | 아니요 | How the edge treats AI crawlers. `disabled` leaves them alone. This is the control on the screen most able to cost a site traffic, in either direction: blocking AI answer engine… |
always_use_https | boolean | 아니요 | — |
automatic_https_rewrites | boolean | 아니요 | — |
opportunistic_encryption | boolean | 아니요 | — |
min_tls_version | CdnMinTlsVersion | 아니요 | The oldest TLS version the edge will negotiate. A string — `1.10` is not a version. |
응답
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
site_id | Uuid | 예 | UUIDv7 identifier — sortable by creation time (docs/02 §8). |
supported | boolean | 예 | Whether the CDN serving this site can express these settings at all. `false` for a provider with no equivalent vocabulary; the other fields then carry defaults and a client shou… |
protection_tier | string | 예 | The protection level this organisation's plan sells (`protection_tier`). Absent from a plan means the floor — every site with a CDN already has the provider's baseline protectio… |
bot_management_included | boolean | 예 | Whether that tier reaches bot management — enabling `bot_fight_mode`, or setting `ai_bots_protection`/`crawler_protection` to `block` or `managed_challenge`. Derived server-side… |
security_level | CdnSecurityLevel | 예 | The provider's own security-level vocabulary, passed through. **Not ordered the way it reads** — `essentially_off` sits between `off` and `low` — so nothing may treat it as a sc… |
bot_fight_mode | boolean | 예 | Challenge traffic the provider classifies as automated. Read from the provider's bot-management resource, not from a zone setting — the zone setting of that name does not exist. |
ai_bots_protection | CdnAiBotMode | 예 | How the edge treats AI crawlers. `disabled` leaves them alone. This is the control on the screen most able to cost a site traffic, in either direction: blocking AI answer engine… |
crawler_protection | CdnAiBotMode | 예 | How the edge treats AI crawlers. `disabled` leaves them alone. This is the control on the screen most able to cost a site traffic, in either direction: blocking AI answer engine… |
always_use_https | boolean | 예 | Redirect every plain-HTTP request to HTTPS at the edge. |
automatic_https_rewrites | boolean | 예 | Rewrite insecure sub-resource URLs in HTML to HTTPS where possible. |
opportunistic_encryption | boolean | 예 | Advertise HTTP/2 over TLS to clients that arrive over plain HTTP. |
min_tls_version | CdnMinTlsVersion | 예 | The oldest TLS version the edge will negotiate. A string — `1.10` is not a version. |
이 엔드포인트가 반환할 수 있는 오류
401 · 403 · 404 · 422 · 429 · 503