hosting

GET /v1/sites/{siteId}/quota

Get a site's enforced disk and inode ceilings, and its usage against them.

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 GET https://api.zinndigital.com/v1/sites/{siteId}/quota \
  -H "Authorization: Bearer zdk_live_…"

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

The limits the platform **actually enforces** on this site and what it is using against them. On our own fleet the disk and inode caps are a real, kernel-enforced `setquota` applied at provision time (ADR 0013 §5), and until this endpoint they were applied and exposed nowhere — a site could hit an inode or disk cap and the customer's only signal was writes beginning to fail. Every field is nullable and each `null` is meaningful. A `null` **limit** means no ceiling is enforced — never "unlimited" as a selling point and never "we did not look". `db_limit_mb` is `null` on every box we operate: MySQL Governor is not installed and an account's MySQL datadir lives outside its home, so no quota reaches it; database size is therefore reported as usage with no cap rather than a limit we do not apply. A site whose platform reports no ceilings at all answers `200` with every field `null`, **not** `404` — "we do not cap this" is a real answer. Requires `sites.view`.

Parameters

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

Response

NameTypeRequiredWhat it is
disk_used_mbintegerYesDisk in use, in MB. Null when the platform reports no figures.
disk_limit_mbintegerYesThe enforced disk ceiling in MB, or null when no cap is enforced. On our fleet this is the hard limit `setquota` applies — the number at which the kernel starts refusing writes,…
inodes_usedintegerYesFiles and directories in use.
inodes_limitintegerYesThe enforced inode ceiling, or null when none is. A site can exhaust this while well under its disk cap — a WordPress install with a large media library or an unbounded cache di…
db_used_mbintegerYesTotal size of the site's database, in MB.
db_limit_mbintegerYesAlways null on platforms we operate. No per-account database *size* limit is enforceable on our boxes, so this reports the absence of a cap rather than inventing one.
disk_allowance_gbintegerYesWhat the site's plan **grants**, in GB — as opposed to `disk_limit_mb`, which is what the box is enforcing right now. They agree on a healthy site; a gap between them is the onl…
inodes_allowanceintegerYesThe file-and-directory allowance the site's plan grants. Null when the plan states none — which is **every managed hosting plan**, because this platform models no inode limit at…
disk_allowance_authoritystring<plan, per_site>Yes**Who decides this site's disk ceiling**, and therefore how to read a gap between `disk_allowance_gb` and `disk_limit_mb` (D10470). `plan` — the plan's grant is authoritative, s…
inodes_allowance_authoritystring<plan, per_site>YesThe same question for the file-and-directory ceiling. See `disk_allowance_authority`; the two are answered by one predicate so the write path and this read path cannot drift (#2…

Errors this endpoint can return

401 · 403 · 404 · 429 · 503