blob revisions lists every revision a blob has, newest first, marks the default, 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 default, so the
*marker comes from the record’sdefault_revision_id. - Lists the revisions.
- Prints one row per revision, newest first. The platform returns that order itself and the CLI keeps it rather than sorting again.
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 default. 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.
There is no snapshot phase — it was never reachable through any endpoint and does not appear here.
This table is why the command exists in the shape it does. The platform’s own rejection for an unusable phase is
a 409 revision_not_writable (a bare 400 before this epic) 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: default resolves
to.
The listing is complete
GET /blobs/:org_id/:blob_id/revisions pages (see List Revisions), and this
command drains the cursor to null before it prints, so the listing is always every revision the blob has —
platform.revisions_per_blob bounds how many can exist, never how many are shown.
It terminates on the cursor and not on a short page, because the cursor is absent only once the query is
exhausted: a final page can legitimately be exactly full.
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 default revision only.blobhub blob limits— the blob’s limits,platform.revisions_per_blobamong them.- Error codes — every code above, and the advisories alongside them.
- List Revisions — the route behind the listing.
- Commit Revision — how a
draftbecomes acommit.

