Skip to content

Milestones & Phases · Field reference

Object shapes returned by the Milestones & Phases endpoints. Fields with no value are omitted, including completionPct when no value can be computed; treat a missing completionPct as "not computable", not as 0.

Milestone and Phase

Milestones and phases share one shape. A milestone marks a single date; a phase spans startDate to endDate. Neither has a level; they sit beside the objective hierarchy rather than inside it.

Always returned

Field Type Description
id string Internal ID
type string Milestone or Phase
key string Key, e.g. M-21 for a milestone or P-7 for a phase
title string Title
date number Milestones only. The milestone date, epoch milliseconds.
startDate / endDate number Phases only. The phase's first and last day, epoch milliseconds.
color string Colour shown on the board, e.g. #2e86de
status object See status
criteria string The completion method that completionPct uses: LINKED_ITEM_STATUS, CHILDREN_LINKED_ITEM_STATUS or CHILDREN_LINKED_ITEM_ESTIMATE
criteriaSource string milestone when a method was selected on the milestone or phase itself (the value is milestone for phases too); boardDefault when none was selected and the board's default (CHILDREN_LINKED_ITEM_STATUS) applies
completionPct number Completion by the method in criteria, 0 to 100. Omitted if the item stores a method the board does not recognise.
completion object All three methods side by side. See Milestone completion.
linkedItemsCount number Number of board cards linked to the milestone or phase

Dates are epoch milliseconds. Convert them in your own timezone; the stored instant can fall on the previous day in UTC.

Optional (via fields): description, collectionIds (the collections the milestone or phase belongs to), createdBy, updatedBy, createdOn, updatedOn.

Milestone completion

Phases use exactly the same three methods.

Field in completion criteria value Calculation
byLinkedItemStatus LINKED_ITEM_STATUS Linked cards in a Done status / all linked cards
byChildrenStatus CHILDREN_LINKED_ITEM_STATUS Sub-items in a Done status / all sub-items of the linked cards
byChildrenEstimate CHILDREN_LINKED_ITEM_ESTIMATE Story points of Done sub-items / story points of all sub-items

Each value is a percentage rounded to two decimals, and 0.0 when there is nothing to count. Sub-items come from Feature-level cards and each is counted once, even if two linked cards share it. The children methods use sub-items only: a story linked directly to a milestone or phase counts towards byLinkedItemStatus but adds nothing to byChildrenStatus or byChildrenEstimate.

Worked example. Milestone M-22 Solvency II Reporting Release has five linked cards: three Features and two stories that are already Done and have no sub-items.

Linked card Status Sub-items Done / total Story points Done / total
FEA-430 Quarterly QRT data extract In Progress 4 / 6 18 / 24
FEA-431 Claims reserve reconciliation In Progress 2 / 5 10 / 26
FEA-432 Regulator submission audit trail In Progress 3 / 4 13 / 16
STORY-1201 Map reserve codes to QRT templates Done none none
STORY-1205 Sign-off checklist for actuarial review Done none none
  • byLinkedItemStatus = 2 / 5 = 40.0 (the two Done stories)
  • byChildrenStatus = 9 / 15 = 60.0
  • byChildrenEstimate = 41 / 66 = 62.12, the milestone's completionPct, because its criteria is CHILDREN_LINKED_ITEM_ESTIMATE

The two Done stories raise byLinkedItemStatus, but because they have no sub-items they add nothing to the two children methods.

Linked card

Returned by the milestone / phase linked-items endpoint (the same card shape as the PI Objectives API). The shape is the same for Jira and Azure DevOps boards.

Field Type Description
id string Kendis internal ID of the card, stable across re-syncs
kendisKey string The card's Kendis key. Present only for cards created in Kendis.
almKey string The card's key in the connected tool: Jira issue key (e.g. FEA-412) or Azure DevOps work item ID (e.g. 20417). Present only for synced cards.
title string Card title
description string Card description as stored (may contain HTML)
cardType string Kendis card level: Feature, UserStory, Epic
almType string Issue or work item type in the connected tool (e.g. Epic, Story, Bug). Omitted for Kendis-only cards.
status object See status
storyPoints number The card's own story point estimate; 0.0 when not estimated
url string Deep link to the card in the connected tool. Present only for synced cards.
isEnabler boolean Present and true for enabler cards
dueDate number Due date, epoch milliseconds
teamsAndSprints array Where the card sits on the board. See entry. Empty for cards in the backlog.
createdOn, updatedOn number Epoch milliseconds
childrenSummary object Only with expand=children. See childrenSummary.
children array Only with expand=children: the card's sub-items in the same card shape (without children)

teamsAndSprints entry

One entry per placement of the card on the board.

{
  "team":   { "id": "<team-id>", "title": "Team Claims", "label": "CLM" },
  "sprint": { "id": "<sprint-id>", "title": "Iteration 3", "label": "S3", "startDate": 1777852800000, "endDate": 1778803200000, "isIPSprint": false }
}

childrenSummary

Field Description
totalItems / doneItems Number of sub-items, and how many are in a Done status
totalStoryPoints / doneStoryPoints Story points over the sub-items, and the Done share
progressPct doneItems / totalItems × 100; 0.0 when there are no sub-items
progressPctByStoryPoints doneStoryPoints / totalStoryPoints × 100; 0.0 when there are no points

Status

{ "id": "<status-id>", "status": "In Progress", "category": "InProgress" }

category is one of ToDo, InProgress, Done, Misc.