Cycles API
Cycles represent time-boxed iterations or sprints in Plane projects. This API allows you to create, manage, and track cycles and their associated work items.
Endpoints
List Cycles
Retrieve all cycles in a project.
Path Parameters
Workspace slug identifier
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/" \
-H "X-Api-Key: your_api_key"
Response
[
{
"id": "450e8400-e29b-41d4-a716-446655440000",
"name": "Sprint 24",
"description": "Q1 2024 Sprint 24",
"start_date": "2024-03-11T00:00:00Z",
"end_date": "2024-03-24T23:59:59Z",
"owned_by": "350e8400-e29b-41d4-a716-446655440000",
"workspace_id": "750e8400-e29b-41d4-a716-446655440000",
"project_id": "550e8400-e29b-41d4-a716-446655440000",
"total_issues": 42,
"completed_issues": 28,
"started_issues": 10,
"unstarted_issues": 4,
"backlog_issues": 0,
"cancelled_issues": 0,
"total_estimates": 89.0,
"completed_estimates": 56.0,
"started_estimates": 25.0,
"created_at": "2024-03-01T10:00:00Z",
"updated_at": "2024-03-09T14:30:00Z"
}
]
Create Cycle
Create a new cycle in a project.
Cycles must be enabled for the project (cycle_view: true) before creating cycles.
Path Parameters
Workspace slug identifier
Request Body
Cycle start date and time (converted to project timezone)
Cycle end date and time (cannot be before start_date)
User ID of cycle owner (defaults to current user)
Timezone for the cycle (e.g., “America/New_York”)
External integration source
External system identifier
Example Request
curl -X POST "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Sprint 25",
"description": "Q1 2024 Sprint 25",
"start_date": "2024-03-25T00:00:00",
"end_date": "2024-04-07T23:59:59",
"owned_by": "350e8400-e29b-41d4-a716-446655440000"
}'
Response
{
"id": "460e8400-e29b-41d4-a716-446655440000",
"name": "Sprint 25",
"description": "Q1 2024 Sprint 25",
"start_date": "2024-03-25T04:00:00Z",
"end_date": "2024-04-08T03:59:59Z",
"owned_by": "350e8400-e29b-41d4-a716-446655440000",
"workspace_id": "750e8400-e29b-41d4-a716-446655440000",
"project_id": "550e8400-e29b-41d4-a716-446655440000",
"total_issues": 0,
"completed_issues": 0,
"created_at": "2024-03-09T15:30:00Z",
"updated_at": "2024-03-09T15:30:00Z"
}
Get Cycle
Retrieve a specific cycle by ID.
Path Parameters
Workspace slug identifier
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/" \
-H "X-Api-Key: your_api_key"
Update Cycle
Update a cycle’s properties.
Example Request
curl -X PATCH "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Sprint 24 - Extended",
"end_date": "2024-03-26T23:59:59"
}'
Delete Cycle
Delete a cycle permanently.
Example Request
curl -X DELETE "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/" \
-H "X-Api-Key: your_api_key"
Cycle Issues
List Cycle Issues
Retrieve all work items assigned to a cycle.
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/cycle-issues/" \
-H "X-Api-Key: your_api_key"
Add Issues to Cycle
Assign work items to a cycle in bulk.
Request Body
Array of issue UUIDs to add to the cycle
Example Request
curl -X POST "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/cycle-issues/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"issues": [
"650e8400-e29b-41d4-a716-446655440000",
"660e8400-e29b-41d4-a716-446655440000"
]
}'
Remove Issue from Cycle
Remove a work item from a cycle.
Example Request
curl -X DELETE "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/cycle-issues/650e8400-e29b-41d4-a716-446655440000/" \
-H "X-Api-Key: your_api_key"
Transfer Issues Between Cycles
Move all issues from one cycle to another.
Request Body
Target cycle UUID to transfer issues to
Example Request
curl -X POST "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/transfer-issues/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"new_cycle_id": "460e8400-e29b-41d4-a716-446655440000"
}'
Cycle Archive
Archive Cycle
Archive a cycle to remove it from active cycle lists.
Example Request
curl -X POST "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/cycles/450e8400-e29b-41d4-a716-446655440000/archive/" \
-H "X-Api-Key: your_api_key"
List Archived Cycles
Retrieve all archived cycles in a project.
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/archived-cycles/" \
-H "X-Api-Key: your_api_key"
Unarchive Cycle
Restore an archived cycle.
Example Request
curl -X DELETE "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/archived-cycles/450e8400-e29b-41d4-a716-446655440000/unarchive/" \
-H "X-Api-Key: your_api_key"
Cycle Response Fields
Cycle start date and time (UTC)
Cycle end date and time (UTC)
Total number of work items in the cycle
Number of completed work items
Number of started work items
Number of unstarted work items
Number of backlog work items
Number of cancelled work items
Total story point estimates
Completed story point estimates
Started story point estimates
Validation Rules
- Project Cycles Enabled: Cycles must be enabled for the project (
cycle_view: true)
- Date Range:
start_date cannot exceed end_date
- Timezone Conversion: Dates are automatically converted to UTC based on project timezone
- Owner: If not specified, defaults to the current authenticated user
Error Responses
Cycles Not Enabled
{
"error": "Cycles are not enabled for this project"
}
Invalid Date Range
{
"error": "Start date cannot exceed end date"
}
Project Not Found
{
"error": "Project not found"
}