List releases
Lists the project's releases, newest first.
Entries carry the digest, the metadata and revoked_at — the pinned set
is omitted.
Read one release with GET /releases/{release_id} to get its pointers.
content_hash looks a release up by its content, as the CLI does when a
person types the digest a transcript printed. The project holds at most
one release per digest, so the filtered list has one entry or none, and
an unknown digest is an empty list rather than an error. Paths take the
rel_ id only; the matched entry's id is what to use there.
AuthorizationBearer <token>Scope: release.read
project_id*stringThe unique identifier of the project
^[a-zA-Z0-9_-]+$content_hash?ReleaseContentHashNarrows the list to the release with this content digest, given in full
with its sha256: prefix. A project holds at most one release per digest,
so the result has one entry or none.
A digest no release of the project carries answers an empty list, not an
error: the filter asks which release has this content, and "none" is a
valid answer. Paths never take a digest; read the matched entry's id
and use that.
^sha256:[0-9a-f]{64}$71 <= length <= 71limit?integerMaximum number of items to return.
1 <= value <= 10020page_token?stringToken for fetching the next page of results.
Obtain this value from next_page_token in the previous response.
Omit to start from the beginning.
Its format is opaque and may change between releases.
The releases were retrieved successfully.
application/json- response
The project's releases, newest first.
releases*array<>next_page_token?|Token to pass as page_token in the next request to fetch the following page.
Absent when there are no more results.
import { configureZitadel, getApi } from "@zitadel/api/config";// In the browser, through the SDK proxy: the session cookie authenticates the call.const client = getApi(configureZitadel({ projectId: "proj_01KWH1P4MYS7F0N9WD3P2E4YM5" }));const releases = await client.listReleases({ project_id: "proj_01KWH1P4MYS7F0N9WD3P2E4YM5" });{ "releases": [ { "id": "rel_01KX3RG8A7F0N9WD3P2E4YM5C1", "project_id": "proj_01KWH1P4MYS7F0N9WD3P2E4YM5", "content_hash": "sha256:9f2c1a7b4e83d05f6c2b19ae7d430f821c6b5de90a4f73829f2c1a7b4e83d05f", "metadata": { "message": "add phone_number to human-user", "git_sha": "4a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7", "git_dirty": false, "created_at": "2026-07-14T09:11:00Z", "created_by": "user_01KWH3B72K7M7F0N9WD3P2E4YM", "created_by_type": "human" }, "revoked_at": null }, { "id": "rel_01KX2ZJ4B8C7F0N9WD3P2E4YM5", "project_id": "proj_01KWH1P4MYS7F0N9WD3P2E4YM5", "content_hash": "sha256:0f1e2d3c4b5a69788796a5b4c3d2e1f0091827364554637281909a8b7c6d5e4f", "metadata": { "message": "initial import", "git_sha": "0f1e2d3c4b5a69788796a5b4c3d2e1f009182736", "git_dirty": false, "created_at": "2026-07-13T08:00:00Z", "created_by": "user_01KWH3B72K7M7F0N9WD3P2E4YM", "created_by_type": "human" }, "revoked_at": "2026-07-14T10:30:00Z" } ], "next_page_token": "v1.dGhpcyBpcyBvcGFxdWU.SflKxwRJSMeKKF2QT4fw"}Was this helpful?