Update a project release
Updates an existing release scoped to a project by setting the values of the parameters passed. Any parameters not provided will be left unchanged. name must remain unique within the workspace, otherwise a 400 RELEASE_NAME_ALREADY_EXISTS error is returned. If tag is provided, it must reference a global release tag or a tag belonging to this project, otherwise a 400 {"tag": "RELEASE_TAG_OUT_OF_SCOPE"} error is returned. project cannot be changed and is ignored if passed.
Path Parameters
workspace_slug:requiredstringThe workspace_slug represents the unique workspace identifier for a workspace in Plane. It can be found in the URL. For example, in the URL https://app.plane.so/my-team/projects/, the workspace slug is my-team.
project_id:requiredstringThe unique identifier of the project.
release_id:requiredstringThe unique identifier for the release.
Body Parameters
name:optionalstringName of the release.
description_html:optionalstringHTML description of the release.
description_json:optionalobjectJSON description of the release.
status:optionalstringStatus of the release. Can be: unreleased, released, cancelled.
target_date:optionalstringTarget date of the release in YYYY-MM-DD format.
release_date:optionalstringActual release date of the release in YYYY-MM-DD format.
lead:optionalstringID of the user who leads the release.
tag:optionalstringID of the release tag associated with the release.
is_latest:optionalbooleanWhether this is the latest release.
is_prerelease:optionalbooleanWhether this release is a prerelease.
external_id:optionalstringExternal ID from an external source.
external_source:optionalstringExternal source identifier.
Scopes
releases:write
curl -X PATCH \
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/releases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/" \
-H "X-API-Key: $PLANE_API_KEY" \
# Or use -H "Authorization: Bearer $PLANE_OAUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": "released",
"release_date": "2025-04-02"
}'import requests
response = requests.patch(
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/releases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/",
headers={"X-API-Key": "your-api-key"},
json={
'status': 'released',
'release_date': '2025-04-02'
}
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/releases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/",
{
method: "PATCH",
headers: {
"X-API-Key": "your-api-key",
"Content-Type": "application/json",
},
body: JSON.stringify({
status: "released",
release_date: "2025-04-02",
}),
},
);
const data = await response.json();{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"created_at": "2025-03-01T10:00:00.000000Z",
"updated_at": "2025-04-02T09:00:00.000000Z",
"deleted_at": null,
"name": "v2.4.0",
"description": {
"description_html": "<p>Spring feature release.</p>",
"description_binary": null,
"description_stripped": "Spring feature release.",
"description_json": {}
},
"status": "released",
"target_date": "2025-03-31",
"release_date": "2025-04-02",
"is_latest": false,
"is_prerelease": false,
"external_id": null,
"external_source": null,
"created_by": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"updated_by": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"workspace": "cd4ab5a2-1a5f-4516-a6c6-8da1a9fa5be4",
"lead": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"tag": "9f8e7d6c-5b4a-3210-fedc-ba0987654321",
"project": "8b2e1c4d-6f3a-4d5e-9c1b-2a3b4c5d6e7f"
}
