blob limits shows the limits in force for a blob — quotas like revisions_per_blob, and the
workflow_component_code_imports allowlist that decides which third-party modules a revision’s code may import.
It is the one command in this group a read- or write-scoped key cannot run at all, and that single fact
explains behaviour across several other commands. This page is where it is stated.
Synopsis
What it does
One call, to the blob’s limits route. Unlike its two siblings it never fetches the blob record first — the limits route is the only request it makes.key=value.
Numeric limits carry a maximum, plus an actual where the platform tracks usage; metadata limits such as the
import allowlist carry a value instead.
What you get back is the merged hierarchy, not just the limits set on the blob: the platform walks from the
blob up through its ancestors and merges them, with the nearest target winning per field. So the set you see is
neither fixed nor exhaustive — it is whatever has been configured for this blob and everything above it.
Under --json the payload carries blob, limits, refreshed, and cache_path (null without --refresh).
Reading limits requires an admin key
The limits routes check for the admin role. The read and write keys the platform itself recommends for
automation get a 403. This was confirmed against the deployed API with a real write key, not inferred from the
handler.
That one fact is the reason for behaviour on several other commands, all of which have to work under exactly the
keys that cannot read limits:
This command does not degrade. A
403 is a hard LIMITS_NOT_ACCESSIBLE, deliberately unlike the compiler’s
allowlist read that swallows the same 403 and falls back to cache. The difference is what the caller asked for:
a build wants imports checked, and a cached answer serves that; this command was asked for the limits, and a
partial answer quietly sourced from a week-old file is worse than a clear refusal.
And it will not name a cause it cannot know. The same handler answers 403 for a blob it cannot find, so the
message names both possibilities — not an admin key, or no such blob — and asserts neither. Sending someone off
to mint an admin key over a typo’d blob name is a worse failure than saying plainly that the platform conflates
the two.
--refresh and the compiler’s allowlist cache
--refresh writes the module list from workflow_component_code_imports into the cache that build, diff and
deploy fall back on, under ~/.blobhub/cache/allowlist/, at mode 0600, alongside the fetch timestamp and the
org and blob it came from. One more line follows the limits, naming the file it wrote:
--json payload’s cache_path.
A live allowlist read already writes that cache, so a build under an admin key refreshes it on its own. The
flag is for when the key that can read limits is not the key that runs the build: an operator with an admin
key seeds the cache, and later builds under a write key read it. The cache is per-machine, so this helps where
the seeding and the building happen on the same machine or in the same image.
Before relying on it, know how the cache is keyed and when it goes stale.
The cache key is your reference as you typed it, lower-cased — org-qualified exactly when your reference is.
build keys on the manifest’s blob: field the same way, as written. So a manifest saying blob: dragon-ops
reads a different cache entry from the one blobhub blob limits acme/dragon-ops --refresh writes, and the
refresh you just ran would change nothing:
ALLOWLIST_STALE and
blobhub doctor’s allowlist row warns, naming the entry and its age. This
command is how you clear that.
Errors
BLOB_NOT_ACCESSIBLE never appears here. This command never fetches the blob record, so an absent blob reaches
you as LIMITS_NOT_ACCESSIBLE instead — which is also all the platform said.
See also
blobhub blob show— the record, readable with any key that can see the blob.blobhub blob revisions— whererevisions_per_blobdecides whether an advisory can fire.- Concepts — the allowlist and the three other platform behaviours that shape the binary.
- Error codes —
LIMITS_NOT_ACCESSIBLE, the allowlist advisories, and the rest of the catalog. - Get Blob Limits — the route behind this command.

