Backlog API
Cycles
Read the time-boxed runs of work of your teams.
Base URLhttps://backlog.polder.work
A cycle is a time-boxed run of work of one team. Cycles are generated and reshaped by Polder itself, so this API only
reads them. To put an issue in a cycle, change the issue's cycle_id.
You only see the cycles of teams you can see.
The cycle object
{
"id": 21,
"team_id": 3,
"number": 12,
"name": "Cycle 12",
"starts_at": "2026-10-19T00:00:00+00:00",
"ends_at": "2026-11-02T00:00:00+00:00",
"completed_at": null,
"progress": null
}
ends_at is the exact instant the cycle stops (exclusive), not the last day. progress is null in a list and filled
when you read one cycle.
List cycles
GET
/api/v1/workspaces/{workspace}/cyclesCycles of the teams you can see, newest start first.
| Parameter | Description |
|---|---|
team_id |
Only cycles of this team (a team id). |
active |
1 for the cycle running right now: starts_at is past and ends_at is not. Dates decide, not completed_at, because a cycle is closed up to an hour after it ends. |
page, per_page |
Paging. 50 per page by default, at most 200. |
curl "https://backlog.polder.work/api/v1/workspaces/7/cycles?team_id=3&active=1" \
-H "Authorization: Bearer $POLDER_TOKEN"
Get a cycle
GET
/api/v1/cycles/{cycle}One cycle, with progress counted over its issues. 403 when you cannot see the team.
{
"data": {
"id": 21,
"number": 12,
"progress": {
"total": 24, "completed": 9, "started": 6, "canceled": 1,
"scope": 23, "percentage": 39,
"estimateTotal": 40, "estimateCompleted": 14
}
}
}