Get a project release
Retrieve one project release by id. Unlike list rows, the response includes description_html.
The release must belong to the project in the path. A workspace release id, or the id of a release in another project, returns 404.
Path Parameters
slug:requiredstringThe workspace slug. It appears in your Plane URLs. In https://app.plane.so/my-team/projects/, the slug is my-team.
project_id:requiredstringThe project the release belongs to. Accepts the project UUID or its bare identifier, for example ENG.
pk:requiredstring (uuid)The id of the release to retrieve.
Response shaping
fields:optionalstringComma-separated list of fields to return. Unrequested keys are omitted from the response, not returned as null, so absent means "not requested" and null means "actually null". id always comes back whether or not you name it.
Pass all for every requestable field. An unknown name is a 400 that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving.
Requestable here: created_at, created_by_id, description_html, description_id, external_id, external_source, id, is_latest, is_prerelease, label_ids, lead_id, name, project_id, release_date, status, tag_id, target_date, updated_at, updated_by_id.
See Sparse fields.
expand:optionalstringComma-separated relations to embed alongside the ids: lead (the lead user) and tag (the release tag).
Expansion is separate-key. ?expand=lead keeps lead_id and adds a lead object next to it, so an id is never replaced by an object. An unknown value is a 400. See Expanding relations.
Scopes
releases:read
Errors
| Status | Code | Cause |
|---|---|---|
401 | unauthorized | Missing or invalid credentials. |
402 | payment_required | Project releases aren't enabled on your plan. |
403 | forbidden | The release exists, but your role in the project can't view it, or your token scope doesn't allow this. |
404 | not_found | No release with this id in this project, or no such workspace or project. |
406 | not_acceptable | The Accept header asks for a representation the API can't produce. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
404 comes before 403
The API resolves the id against the project first, so an unknown id is always a 404. A 403 means the release exists and you can't view it. The release's comments and links behave differently and answer 404 in that case.
curl -X GET \
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/releases/3e8a1f52-7c4b-4d9e-a6f1-0b2c5d8e9f14/?expand=tag" \
-H "X-Api-Key: $PLANE_API_KEY"import requests
response = requests.get(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/releases/3e8a1f52-7c4b-4d9e-a6f1-0b2c5d8e9f14/",
headers={"X-Api-Key": "your-api-key"},
params={"expand": "tag"},
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/releases/3e8a1f52-7c4b-4d9e-a6f1-0b2c5d8e9f14/?expand=tag",
{
headers: {
"X-Api-Key": "your-api-key",
},
},
);
const data = await response.json();{
"id": "3e8a1f52-7c4b-4d9e-a6f1-0b2c5d8e9f14",
"name": "Mobile 4.2.0",
"project_id": "4af68566-94a4-4eb3-94aa-50dc9427067b",
"description_id": "5d2b7e91-4a3c-4f68-9e0d-1c7a8b2f6e35",
"description_html": "<p>Offline mode and the new onboarding flow.</p>",
"status": "unreleased",
"target_date": "2026-02-27",
"release_date": null,
"lead_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"tag_id": "a41c9e07-2f5d-4b83-8c6e-9d1f0a3b7c52",
"is_latest": false,
"is_prerelease": false,
"external_id": null,
"external_source": null,
"label_ids": ["7f3a2c19-8e4d-4b61-a5c7-2d9e0f1b8a46"],
"created_at": "2026-01-14T09:22:41.478363Z",
"updated_at": "2026-01-14T09:22:41.478363Z",
"created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"updated_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"tag": {
"id": "a41c9e07-2f5d-4b83-8c6e-9d1f0a3b7c52",
"version": "4.2.0",
"git_tag": "v4.2.0",
"commit_hash": null
}
}{
"type": "not_found",
"code": "not_found",
"detail": "The requested resource was not found."
}
