blob revisions lists every revision a blob has, newest first, marks the latest, and shows each one’s phase and
status. It is what turns a REVISION_NOT_WRITABLE failure into something self-diagnosing: the command that
refused you named a phase, and this is where you see which revisions are in which.
Synopsis
The command has no flags of its own.
--org and --json are
global, so they go before the subcommand.
What it does
- Parses the reference, exactly as
blob showdoes. - Fetches the blob record. Required, not enrichment: the listing itself does not report which revision is
the latest, so the
*marker comes from the record’slatest_revision_id. - Lists the revisions.
- Reads the blob’s limits to decide whether the listing may have truncated. That read needs an
adminkey, so it usually fails; it degrades silently and the check is simply skipped. - Sorts newest first by
created_atand prints one row per revision. The platform returns index order, which is neither documented nor useful, and the reason to run this command is almost always to find a recent revision.
0. A bare column header over no
rows is noise a pipeline has to filter back out.
Under --json the payload carries blob and revisions, each entry holding id, phase, status,
created_at, comment, parent_id and the boolean latest. parent_id is in the JSON only; the rendered
table leaves it out.
Phases, and which of them a command will accept
Both columns additionally require the revision’s status to be
ready, which is what the STATUS column is for.
This table is why the command exists in the shape it does. The platform’s own rejection for an unusable phase is
a 400 bad request whose message does not mention the revision at all, so the CLI pre-checks the phase before
it writes anything and reports REVISION_NOT_WRITABLE locally, naming the phase it found. When you get that
code, this listing is the answer to “then which revision can I write to?” — the phase column is right there,
and * marks the one a manifest’s revision: latest resolves to.
The truncation advisory
REVISION_LIST_TRUNCATED is raised when the number of revisions returned has reached the blob’s configured
revisions_per_blob maximum. The platform cannot page this listing, so a blob at its cap may be missing
revisions that were silently dropped — nothing in the API reports it, which is why the CLI infers it from the
count.
The check runs only when the limit is readable, which needs an admin-scoped key. With the read or write
keys the platform recommends for automation, the limit read fails, the check is skipped, and the command stays
silent rather than guessing. See blobhub blob limits for why that is, and for what else it
explains.
Like every advisory, it goes to stderr, is suppressed by --quiet and whenever stderr is not a TTY, and never
changes the exit code.
Errors
The revisions route is gated on
read, not admin — and that was confirmed against the deployed API with a
non-admin key, not merely read off the handler. It matters: if it needed admin, this command would be useless
to exactly the keys the platform tells automation to use, and the one command that explains a phase failure
would be unavailable to the automation hitting it.
See also
blobhub blob show— the blob record, and the latest revision only.blobhub blob limits— theadmin-only read this command degrades around.- Error codes — every code above, and the advisories alongside them.
- List Revisions — the route behind the listing.
- Commit Revision — how a
draftbecomes acommit.

