hosting
GET /v1/sites/{siteId}/quota
Get a site's enforced disk and inode ceilings, and its usage against them.
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
| Name | Type | Required | What it is |
|---|---|---|---|
siteId (path) | Uuid | Yes | Site ID (UUIDv7). |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
disk_used_mb | integer | Yes | Disk in use, in MB, that counts toward the limit. Null when the platform reports no figures. Our own WordPress plugins are not included (see own_plugins_mb). |
own_plugins_mb | integer | No | MB held by our own WordPress plugins on this site, which do NOT count toward the disk limit (owner ruling 2026-10-01). Only a plugin folder whose files are exactly a build we… |
own_plugins_inodes | integer | No | Files and directories of our own WordPress plugins on this site, which do NOT count toward the file (inode) limit. Same verification as own_plugins_mb. |
own_plugins | string[] | No | The plugin folders that were verified as ours and are not counted. |
disk_limit_mb | integer | Yes | The 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_used | integer | Yes | Files and directories in use that count toward the limit (our own WordPress plugins are not included; see own_plugins_inodes). |
inodes_limit | integer | Yes | The 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… |
db_used_mb | integer | Yes | Total size of the site's database, in MB. |
db_limit_mb | integer | Yes | The site's database allowance in MB (W43-78). No server can hold a database to a size, so this is NOT a ceiling written to the box: it is the per-site limit the platform sweeps… |
disk_allowance_gb | integer | Yes | What 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 only… |
inodes_allowance | integer | Yes | The 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_authority | string<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, so… |
inodes_allowance_authority | string<plan, per_site> | Yes | The 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… |
Errors this endpoint can return
401 · 403 · 404 · 429 · 503