Get Planning Increment Card Counts
GET /io/board/:boardId/planningIncrementCardCount
Get card counts and sizes for planning increments on a board. Returns counts per planning increment plus an unplanned bucket for cards not assigned to any PI.
Query Params
| Param | Type | Usage | Default |
|---|---|---|---|
planningIncrements |
string | Filter to comma-separated planning increment ids | all PIs on board |
includeEmpty |
boolean | Include PIs with zero cards | false |
groupBy |
enumeration | Break down counts within each PI by priority, cardType, customIcon, parentCard, assignedTeam, or customField |
(no grouping) |
customFieldId |
string (numeric) | Required when groupBy=customField. Must be a dropdown custom field |
Example Requests
Get counts for all planning increments on a board:
curl -X GET \ https://myaccount.leankit.com/io/board/943188457/planningIncrementCardCount \ -H 'Authorization: Bearer <token>'
Include PIs that have no cards:
curl -X GET \ https://myaccount.leankit.com/io/board/943188457/planningIncrementCardCount?includeEmpty=1 \ -H 'Authorization: Bearer <token>'
Filter to specific PIs:
curl -X GET \ https://myaccount.leankit.com/io/board/943188457/planningIncrementCardCount?planningIncrements=1000,1001,1003 \ -H 'Authorization: Bearer <token>'
Group by card type:
curl -X GET \ https://myaccount.leankit.com/io/board/943188457/planningIncrementCardCount?groupBy=cardType \ -H 'Authorization: Bearer <token>'
Group by custom field (must be a choice-type field):
curl -X GET \ https://myaccount.leankit.com/io/board/943188457/planningIncrementCardCount?groupBy=customField&customFieldId=777 \ -H 'Authorization: Bearer <token>'
Example Successful Responses
200 — without groupBy
{
"planningIncrements": {
"1000": { "cardCount": 1, "cardSize": "10" },
"1001": { "cardCount": 2, "cardSize": "11" },
"1002": { "cardCount": 1, "cardSize": "15" }
},
"unplanned": { "cardCount": 1, "cardSize": "20" }
}
200 — groupBy=priority
{
"planningIncrements": {
"1000": {
"cardCount": 1,
"cardSize": "10",
"groups": {
"normal": { "cardCount": 1, "cardSize": "10" }
}
},
"1001": {
"cardCount": 2,
"cardSize": "11",
"groups": {
"normal": { "cardCount": 1, "cardSize": "10" },
"high": { "cardCount": 1, "cardSize": "1" }
}
}
},
"unplanned": {
"cardCount": 1,
"cardSize": "20",
"groups": {
"low": { "cardCount": 1, "cardSize": "20" }
}
}
}
200 — groupBy=cardType (includes groupNames mapping ids to display names)
{
"planningIncrements": {
"1000": {
"cardCount": 1,
"cardSize": "10",
"groups": {
"10": { "cardCount": 1, "cardSize": "10" }
}
}
},
"unplanned": { "cardCount": 0, "cardSize": "0", "groups": {} },
"groupNames": { "10": "Feature", "20": "Defect" }
}
200 — groupBy=customIcon or groupBy=parentCard or groupBy=assignedTeam (includes ungrouped for
items not matched to any group, and groupNames)
{
"planningIncrements": {
"1001": {
"cardCount": 2,
"cardSize": "11",
"groups": {
"200": {
"cardCount": 1,
"cardSize": "1"
}
},
"ungrouped": {
"cardCount": 1,
"cardSize": "10"
}
}
},
"unplanned": {
"cardCount": 1,
"cardSize": "20",
"groups": {},
"ungrouped": {
"cardCount": 1,
"cardSize": "20"
}
},
"groupNames": {
"200": "Expedite"
}
}
Error Responses
| Status Code | Reason |
|---|---|
401 Unauthorized |
Missing or invalid JWT |
403 Forbidden |
Caller lacks boardReader permission on the board |
422 Unprocessable Entity |
groupBy value is not one of the allowed enums, groupBy=customField is missing customFieldId, customFieldId is non-numeric, or the referenced custom field does not exist or is not a dropdown type |

