Unarchive a cycle
POST/api/v2/workspaces/{slug}/projects/{project_id}/cycles/{pk}/unarchive/
Clear an archived cycle's archived_at and put the cycle back in the default cycle list.
This is a bodyless POST. A successful call returns 204 with an empty body. Unarchive has no date rule. Any archived cycle can be restored, whatever its end_date.
Path Parameters
slug:requiredstringThe workspace slug. It appears in your Plane URLs, for example my-team in https://app.plane.so/my-team/projects/.
project_id:requiredstring (uuid)The project the cycle belongs to.
pk:requiredstring (uuid)The cycle's UUID. A cycle from another project returns 404.
Body Parameters
None. The endpoint takes no request body, and anything you send is ignored.
Safe to repeat
Unarchiving a cycle that is not archived returns 204 and changes nothing, so a retry never fails on state.
Scopes
projects.cycles:write
Errors
| Status | Code | Cause |
|---|---|---|
400 | invalid_request | A malformed path parameter, for example a pk that isn't a UUID. |
401 | unauthorized | Missing or invalid credentials. |
402 | payment_required | The feature this endpoint belongs to isn't enabled on your plan, or is switched off. |
403 | forbidden | Your role or token scope can't unarchive cycles in this project. |
404 | not_found | No such cycle, wrong project, or the record is outside your tenant. |
406 | not_acceptable | The Accept header asks for a representation the API can't produce. |
409 | conflict | The write collides with a protected-resource constraint. |
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. |
Unarchive a cycle
bash
curl -X POST \
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/cycles/7c1f9a4e-3b6d-4a52-8f0c-2d9e6b18c3a7/unarchive/" \
-H "X-Api-Key: $PLANE_API_KEY"python
import requests
response = requests.post(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/cycles/7c1f9a4e-3b6d-4a52-8f0c-2d9e6b18c3a7/unarchive/",
headers={"X-Api-Key": "your-api-key"},
)
print(response.status_code) # 204javascript
const response = await fetch(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/cycles/7c1f9a4e-3b6d-4a52-8f0c-2d9e6b18c3a7/unarchive/",
{
method: "POST",
headers: { "X-Api-Key": "your-api-key" },
},
);
console.log(response.status); // 204Response204
No response body.
Response404
json
{
"type": "not_found",
"code": "not_found",
"detail": "The requested resource was not found."
}What unarchiving changes
archived_atgoes back tonull. Nothing else on the cycle changes.- The cycle shows up in List cycles again without any archive parameter.
- Favorites that archiving removed stay removed.

