quota
quota inspects a site's storage + bandwidth usage against its tier limit. site-scoped: both verbs require --site . read-only — quotas are managed server-side by the billing layer. tier: [ready] for both verbs.
verbs:
quota show— current storage snapshot for a site, with alarmsquota history— daily usage rollup over the requested window
quota show
prints the current storage snapshot for a site: tier, committed + pending bytes, the limit (or "unlimited" for byo-bucket plans), the most recent reconciliation timestamp, and any active alarm firings. human mode renders an ascii progress bar; --json returns the full snapshot for scripting.
owlette quota show --site <siteId> [--json]| flag | type | required | description |
|---|---|---|---|
--site <siteId> | string | yes | site id to fetch quota for |
examples
# human-readable snapshot
owlette quota show --site site-1
# site site-1
# tier pro
#
# storage: 12.4 GiB / 50.0 GiB (25%) [#####...............]
# pending: 240 MiB (in-flight uploads, not yet committed)
# reconciled at 2026-04-26T03:00:00Z# extract the fraction used for a billing alert script
owlette --json quota show --site site-1 | jq '.fractionUsed'# warn if any alarm has fired in the last reconciliation window
owlette --json quota show --site site-1 \
| jq -e '.alarms | length > 0' && echo "alarm active"the human-mode bar follows this exact format (20 hash-characters wide):
storage: <used> / <limit> (NN%) [#####...............]unlimited / byo-bucket sites print <committed> used (unlimited — byo bucket) in place of the bar.
backing: GET /api/sites/{siteId}/quota.
quota history
prints a daily rollup of storage average, class-a + class-b operations, and egress bytes over the requested window. one row per UTC day in the period. defaults to 30d.
owlette quota history --site <siteId> [--period <window>] [--json]| flag | type | required | description |
|---|---|---|---|
--site <siteId> | string | yes | site id to fetch usage history for |
--period <window> | enum | no | time window: 7d, 14d, 30d, 60d, or 90d (default 30d) |
valid --period values are exactly 7d, 14d, 30d, 60d, 90d — anything else exits 2 with a usage error.
examples
# default 30-day rollup
owlette quota history --site site-1# tighter 7-day window
owlette quota history --site site-1 --period 7d# total egress over the last 90 days
owlette --json quota history --site site-1 --period 90d \
| jq '[.daily[].egressBytes] | add'backing: GET /api/sites/{siteId}/quota/history?period=<window>.
exit codes
0— success (snapshot printed or history table emitted)1— network failure or non-2xx api response (e.g.403if you lack access to the site), invalid--periodvalue, or a missing--site(a commander usage error)2— no token configured for the active profile
notes
- scope: site-scoped —
--site <siteId>is required on both verbs - tier:
[ready]— both endpoints are fully public - alarms:
quota showsurfaces the rolling list of alarm firings (each with timestamp + threshold percentage). billing-managed; the cli is read-only here - pending vs committed:
pendingBytesare in-flight uploads that haven't been finalized yet. onlycommittedBytescount toward the tier limit - history granularity: one bucket per UTC day. partial days at the head of the window are included with whatever has been recorded so far
- related: overview (json envelope), site (find your site ids), roost (the main thing eating your storage)
process
manage the lifecycle of long-running processes on a single machine — register, update, delete, and queue start / stop / restart / kill commands, plus configure run-mode + schedule blocks. every verb is machine-scoped and requires both --site and --machine . all ten verbs are tier A — ready and hit the wave-2B public process api today.
rollback
roll a roost back to a previous version from the top-level owlette rollback helper. this command is site-scoped and route-backed.