Skip to content

PI Objectives API

Retrieve Objective Groups, Objectives, Key Results and their linked board items for a PI Board.

Milestones and phases of a PI board have their own API: see Milestones & Phases.

The PI Objectives API is available in two versions:

V1 API (recommended for new integrations) Legacy endpoint
Base URL https://{yourcompany}.kendis.io/api/v1/… https://rest.kendis.io/api/<companyPrefix>/…
Shape One route per resource: board, groups, objectives, key results, linked cards One call returns the whole tree for a board
Key Results First-class resources with criteria (Target or By Items), metric values and their own linked cards Not exposed
Progress completionPct exactly as the PI board's Objectives screen shows it completion, selectable via completionType
Pagination / fields startAt / pageLimit, fields None
Envelope { "startAt", "pageLimit", "total", "Data": [ … ] } { "data": [ … ] }
Docs V1 endpoints · V1 field reference Legacy endpoints · Legacy field reference

Both use HTTP Basic auth (email : API key). The legacy endpoint keeps working unchanged, so existing integrations need no changes.

For Strategic Themes / portfolio OKRs, see the Strategic Themes & OKRs API. For Risks, see the Risk API.


V1 API

The hierarchy

graph TD
  B[PI Board] --> OG[Objective Group · level 1]
  OG --> O[Objective · level 2]
  O --> KR[Key Result · level 3]
  O --> C1[Linked cards]
  KR --> C2[Linked cards]
  C1 --> S1[Sub-items]
  C2 --> S2[Sub-items]

Each Group, Objective and Key Result carries a numeric level and a type string ("Objective Group", "Objective", "Key Result"), the same convention as the Strategic Themes & OKRs API.

Quick reference

Step Action Method Path
1 List boards (gets boardId) GET /api/v1/boards
2 PI board summary GET /api/v1/pi-boards/{boardId}
3 Objective Groups GET /api/v1/pi-boards/{boardId}/objective-groups
4 Objectives (per group or all) GET /api/v1/pi-boards/{boardId}/objectives
5 Key Results of an Objective GET /api/v1/pi-boards/{boardId}/objectives/{keyOrId}/key-results
6 Linked cards GET /api/v1/pi-boards/{boardId}/objectives/{keyOrId}/linked-items

See V1 endpoints for the full list.

Access rules

A PI board is served only when both of the following hold. Otherwise the response is 404 with the same message, whether the board does not exist or is not visible to you.

  • The board belongs to your company and is not deleted.
  • The board's collection is one the API user can open in Kendis. This is the same rule the legacy /objective-groups endpoint applies.

Objectives and Key Results are always addressed through their board (/pi-boards/{boardId}/…). A key such as OBJ-205 that exists on another board, or on a Strategic Theme, is a 404 on this board's routes.

Boards whose objectives live in the legacy objectives view return 400 with an explanatory message; they are served by the legacy endpoint only.

Boards without objectives

A board whose Objectives screen has never been used is served as an empty board: 200 with zero counts, empty lists, and 404 for any objective or key result key. The board summary then leaves out okrEnabled and uncommittedObjectivesEnabled, because the board has no objectives settings to report. Its milestones and phases (Milestones & Phases API) are served normally.

If a board has objectives but its objectives settings are missing, its objectives routes return 409 with an explanatory message rather than numbers that might not match the board. Milestone and phase routes are not affected.

Progress

completionPct on groups, objectives and key results is produced by the same calculation that renders the PI board's Objectives screen, so the numbers you read are the numbers the board shows, including:

  • the board's OKR setting (OKR weights formula when OKR mode is on, otherwise the board's default completion type),
  • objective and key result weightages,
  • Target key results (progress from baseline, current and target values),
  • By Items key results (progress from the linked cards using the key result's completionCriteria),
  • the board's statistics exclusions.

When a board hides uncommitted objectives, they are hidden here too.


Legacy endpoint

graph LR
  A[GET /collections] --> B[GET /boards]
  B --> C[GET /objective-groups?boardId=…]
  C --> D[Objectives → linkedItems → subItems]

An Objective Group contains Objectives; each Objective has linkedItems (board items such as Features), and each linked item can have subItems (e.g. User Stories). Linked-item fields reflect the board's source system: ADO-connected boards expose tfsId / tfsURL; Jira-connected boards expose jiraId / jiraKey. Completion roll-ups are controlled by completionType, and team/sprint enrichment by additionalColumns.

Step Action Method Path
1 List collections (only if filtering boards) GET /api/<companyPrefix>/collections
2 List boards (gets boardId) GET /api/<companyPrefix>/boards
3 List objective groups GET /api/<companyPrefix>/objective-groups

All URLs: https://rest.kendis.io + the path above.

Don't extract board IDs from browser URLs

The URL of a PI board in the app shows a session ID, not the board ID. They differ, on both versions of this API. Always fetch identifiers via List Boards first.