인증
Bearer 토큰으로 API 키를 전송하세요. 키는 반드시 sites.view 권한을 가지고 있어야 하며, 권한이 없는 키는 404가 아닌 403으로 거부됩니다.
이 엔드포인트는 조직 ID를 받지 않습니다. 사용자의 키가 이미 속한 조직을 식별하며, 응답은 해당 조직으로 한정됩니다.
무료 체험하기
대괄호 안에 있는 모든 내용을 사용자 지정 값으로 바꾸고, 키 플레이스홀더는 대시보드의 키로 바꾸세요.
curl -X DELETE https://api.zinndigital.com/v1/sites/{siteId} \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "confirm_domain": <string> }'로그인하셨나요? 대시보드의 API 콘솔이 실제 조직 ID와 본인의 키를 자동으로 채우고 라이브 API를 대상으로 요청을 실행하므로 실제 응답을 확인할 수 있습니다. API 콘솔에서 이 엔드포인트를 여세요
상세 정보
Starts the grace period after which the site, its vendor hosting package and everything on them are destroyed. Until this operation existed the driver could delete a package and the teardown workflow was in place, and a customer who wanted their own site gone had to open a ticket. The site is not suspended while the countdown runs — it serves normally, so waiting costs nothing. ⛔ This operation carries a request body on DELETE. RFC 9110 permits it and it is deliberate: the typed confirmation must travel with the request that acts on it, because a "confirm" call followed by an unconfirmed delete is two requests and the second one is the whole vulnerability. confirm_domain is compared against SiteDeletion.primary_domain — case-insensitively, ignoring surrounding whitespace and a trailing root dot, and never against an alias. 202 and not 200: nothing has been destroyed yet. The body is the same SiteDeletion resource getSiteDeletion returns, so the client renders the countdown from the server's answer rather than from what it asked for. A deletion already scheduled is 409. A confirmation that does not match, an absent confirm_domain, or a site whose state does not allow deletion is 422. 503 means the teardown could not be armed and nothing was scheduled — the request is safe to repeat. A site with no vendor hosting package — anything on our own fleet, or a Zinn® VPS — has no such operation and returns 404, exactly as an out-of-scope or unknown id does. Requires sites.view and sites.delete; the site lookup is scoped on sites.delete, so holding it in one organisation does not reach a site in another.
매개변수
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
siteId (path) | Uuid | 예 | Site ID (UUIDv7). |
요청 본문
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
confirm_domain | string | 예 | The site's primary domain, as the customer typed it. Read the value to prompt for from SiteDeletion.primary_domain rather than from a Site object already on screen: one value… |
응답
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
site_id | string | 예 | The site this deletion state belongs to. |
primary_domain | string | 예 | ⛔ What the customer must type into deleteSite, and what the engine compares against. Read it from here rather than from a Site object already on screen: one value on both… |
state | string<none, scheduled, running, stalled, deleted> | 예 | Where the site is in its lifecycle. A stable machine value the client turns into a localised sentence — never English composed by the engine (§2.19). ⛔ stalled is running that… |
deletable | boolean | 예 | Whether a deletion could be requested right now. False on a site whose state does not allow it, so the form is explained rather than offered and refused. |
scheduled_for | string | 예 | When the teardown fires, or null when nothing is scheduled. |
requested_at | string | 예 | When the deletion was requested, or null when nothing is scheduled. |
grace_days | integer | 예 | How many days the countdown runs. Clamped at both ends — a floor of one day is what stops a misconfiguration meaning delete now. |
grace_free_reason | string<, internal, never_provisioned> | 예 | Why this site would skip the grace period entirely, or "" when it would not. never_provisioned means the site is failed — provisioning never completed, so nothing was ever… |
can_cancel | boolean | 예 | ⛔ Its own field, and never recomputed as state == "scheduled". Once the teardown starts, the request row still says scheduled while the site is already being deleted; a… |
이 엔드포인트가 반환할 수 있는 오류
401 · 403 · 404 · 409 · 422 · 429 · 503