hosting

POST /v1/sites/{siteId}/protection/directories

Password-protect a folder on a site.

All hosting endpoints

Authentication

Send an API key as a bearer token. The key must carry the sites.view permission; a key without it is refused with 403, not 404.

This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X POST https://api.zinndigital.com/v1/sites/{siteId}/protection/directories \
  -H "Authorization: Bearer zdk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "directory": <string>, "username": <string> }'

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

Puts an HTTP password on one folder under the document root. `POST` and not a `PUT` of the whole set even though the vendor endpoint replaces it: the set is rebuilt by the engine from the entries the platform itself returned, precisely because we do not hold the other folders' passwords and must not ask a customer to re-enter them to protect a new one. ⛔ **The response carries a password, and it is the only one on this surface that does.** Omit `password` and the engine generates a strong one; either way the value is returned **exactly once**, written to no record of ours, and readable back by no endpoint. The whole response is therefore a credential: a client displays it once and does not cache it, store it in a query cache, put it in a URL, or include it in an error report. `username` may not contain a colon or a space — `:` separates the name from the hash in an `.htpasswd` file, so a name containing one produces a file that parses into something other than what was written. `404` for a site with no vendor hosting package. Requires `sites.view` and `sites.panel_access`.

Parameters

NameTypeRequiredWhat it is
siteId (path)UuidYesSite ID (UUIDv7).

Request body

NameTypeRequiredWhat it is
directorystringYesThe folder to protect, relative to the document root. It is normalised before it is compared with what the vendor holds, so what is protected is the folder the customer meant.
usernamestringYesThe name a visitor types. No colon and no space, because this is written into an `.htpasswd` file where `:` is the field separator.
passwordstringNoOptional. Omitting it means *generate one for me*, which is the path that guarantees a strong value. Write-only: whatever is sent here appears in no response, no log line and no…

Response

NameTypeRequiredWhat it is
directorySiteProtectedDirectoryYesThe folder, exactly as `getSiteProtection` will report it.
passwordstringYesThe password, shown once. Deliberately carries no example — a documented example of a credential field is the shape people copy. ⛔ It never contains a colon: this value is writt…

Errors this endpoint can return

401 · 403 · 404 · 409 · 422 · 429 · 503