Update a project release changelog
Write the release notes of a project release. The API creates the changelog on demand, so you don't need to read it first.
PATCH is partial. Send description_html, description_json, or both. A field you omit keeps its stored value. The API stores each field as sent and doesn't derive one from the other, so send both when you want them to match.
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 whose changelog you want to write.
Body Parameters
description_html:optionalstringThe changelog as HTML. Replaces the stored HTML. An empty string is allowed.
description_json:optionalobjectThe changelog in the editor's JSON format. Replaces the stored JSON.
Scopes
releases:write
Errors
| Status | Code | Cause |
|---|---|---|
400 | invalid_request | A body field has the wrong type, for example null for description_html. |
401 | unauthorized | Missing or invalid credentials. |
402 | payment_required | Project releases aren't enabled on your plan. |
403 | forbidden | Your role in the project can't edit this release, 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. |
409 | conflict | Not raised by this endpoint. The spec lists it for every v2 write. |
413 | payload_too_large | The request body is over the size limit. |
415 | unsupported_media_type | The Content-Type isn't one this endpoint accepts. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
curl -X PATCH \
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/releases/3e8a1f52-7c4b-4d9e-a6f1-0b2c5d8e9f14/changelog/" \
-H "X-Api-Key: $PLANE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description_html": "<h2>Mobile 4.2.0</h2><ul><li>Offline mode for lists and boards</li><li>New onboarding flow</li></ul>"
}'import requests
response = requests.patch(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/releases/3e8a1f52-7c4b-4d9e-a6f1-0b2c5d8e9f14/changelog/",
headers={"X-Api-Key": "your-api-key"},
json={
"description_html": "<h2>Mobile 4.2.0</h2><ul><li>Offline mode for lists and boards</li><li>New onboarding flow</li></ul>",
},
)
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/changelog/",
{
method: "PATCH",
headers: {
"X-Api-Key": "your-api-key",
"Content-Type": "application/json",
},
body: JSON.stringify({
description_html:
"<h2>Mobile 4.2.0</h2><ul><li>Offline mode for lists and boards</li><li>New onboarding flow</li></ul>",
}),
},
);
const data = await response.json();{
"id": "8b5d3f20-9c6e-4a17-b2d8-4e0f1a7c6b95",
"release_id": "3e8a1f52-7c4b-4d9e-a6f1-0b2c5d8e9f14",
"changelog_id": "e1a7c4b9-2d5f-4e83-9a06-7b3c8d1f5e42",
"description_html": "<h2>Mobile 4.2.0</h2><ul><li>Offline mode for lists and boards</li><li>New onboarding flow</li></ul>",
"description_json": {}
}
