Skip to main content
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

  1. Parses the reference, exactly as blob show does.
  2. 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’s default_revision_id.
  3. Lists the revisions.
  4. Prints one row per revision, newest first. The platform returns that order itself and the CLI keeps it rather than sorting again.
An empty listing prints nothing at all — not even the header — and exits 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