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-groupsendpoint 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.