Strategic Themes & OKRs — Field reference¶
Pass fields as ?fields=key,title or ?fields=all. Omit fields= for a minimal set (id, key, title). Fields with no value are omitted.
Portfolio Theme fields¶
| Field | Type | Description |
|---|---|---|
id |
string | Portfolio Theme ID |
key |
string | Portfolio Theme key (e.g. portfolio-10) |
title |
string | Portfolio Theme name |
status |
object | { status: "title", id: "..." } |
linkedThemes |
array | Linked Strategic Theme IDs |
Strategic Theme fields¶
| Field | Type | Description |
|---|---|---|
id |
string | Strategic Theme ID |
key |
string | Strategic Theme key (e.g. CV-20) |
title |
string | Strategic Theme name |
status |
object | { status: "title", id: "..." } |
owners |
array | Owner IDs |
color |
string | Strategic Theme colour hex code |
summary |
string | Short summary |
description |
string | Full description |
Objective Group fields¶
| Field | Type | Description |
|---|---|---|
id |
string | Objective Group ID |
level |
int | Hierarchy level — always 1 for Objective Groups (always returned) |
type |
string | Entity kind — always "Objective Group" (always returned) |
title |
string | Objective Group name |
completionPct |
number | Group completion percentage (0–100) |
objectivesCount |
int | Number of Objectives in the group |
sequence |
number | Display order |
status |
object | { status: "title", id: "..." } |
bvPlan |
number | Planned business value |
bvActual |
number | Actual business value |
completionCriteria |
string | Completion calculation method — see values |
association |
string | Comma-joined list of linked Departments, Batches, and Program Boards (mirrors the XLS export's Association column) |
Objective fields¶
| Field | Type | Description |
|---|---|---|
id |
string | Objective ID |
level |
int | Hierarchy level — always 2 (always returned) |
type |
string | Entity kind — always "Objective" (always returned). Use objType for the parsed subtype. |
key |
string | Objective key (e.g. OBJ-329) |
title |
string | Objective title |
completionPct |
number | Completion percentage (0–100) |
timePeriod |
string | Time period (e.g. H1 2026, Q2 2026) |
endTimePeriod |
string | End time period (when configured in the objective layout) |
status |
object | { status: "title", id: "..." } |
description |
string | Objective description |
bvPlan |
number | Planned business value |
bvActual |
number | Actual business value |
completionCriteria |
string | Completion method — see values |
sequence |
number | Display order |
groupName |
string | Parent Objective Group name |
groupId |
string | Parent Objective Group ID |
groupType |
string | Group type: TeamGroup or CustomGroup |
keyResultsCount |
int | Number of Key Results and child Objectives |
linkedItems |
array | Linked items [{ id, linkType }] |
linkedItemDetails |
array | Resolved backlog item details [{ id, key, title, url, status }] |
objType |
string | Parsed Objective subtype: "Committed", "Stretch", "Uncommitted" |
startDate |
number | Start date (epoch ms) from the configured Start Date field |
endDate |
number | End date (epoch ms) from the configured End Date field |
responsible |
object | { id, fullName } of the user assigned as responsible |
association |
string | Comma-joined list of linked Departments, Batches, and Program Boards |
lastComment |
string | Plain-text content of the most recent comment |
lastCommentOn |
number | Timestamp of the most recent comment (epoch ms) |
createdBy |
string | Creator user |
updatedBy |
string | Last updater user |
createdOn |
number | Creation timestamp (epoch ms) |
updatedOn |
number | Last update timestamp (epoch ms) |
customFields |
array | Custom fields [{ id, title, type, value }] — see Custom fields |
Key Result fields¶
| Field | Type | Description |
|---|---|---|
id |
string | Key Result ID |
level |
int | Hierarchy level — always 3 (always returned) |
type |
string | Entity kind — always "Key Result" (always returned) |
key |
string | Key Result key (e.g. KR-141) |
title |
string | Key Result title |
completionPct |
number | Completion percentage (0–100) |
criteria |
string | Progress criteria (e.g. By Items, Target, By Objectives) |
timePeriod |
string | Time period |
endTimePeriod |
string | End time period (when configured in the KR layout) |
status |
object | { status: "title", id: "..." } |
description |
string | Key Result description |
bvPlan |
number | Planned business value |
bvActual |
number | Actual business value |
sequence |
number | Display order |
metric |
object | { baseline, target, current, unit } (for Target-based Key Results) |
linkedItems |
array | Linked items [{ id, linkType }] |
linkedItemDetails |
array | Resolved backlog item details [{ id, key, title, url, status }] |
startDate |
number | Start date (epoch ms) |
endDate |
number | End date (epoch ms) |
responsible |
object | { id, fullName } of the user assigned as responsible |
association |
string | Comma-joined list of linked Departments, Batches, and Program Boards |
lastComment |
string | Plain-text content of the most recent comment |
lastCommentOn |
number | Timestamp of the most recent comment (epoch ms) |
createdBy |
string | Creator user |
updatedBy |
string | Last updater user |
createdOn |
number | Creation timestamp (epoch ms) |
updatedOn |
number | Last update timestamp (epoch ms) |
customFields |
array | Custom fields [{ id, title, type, value }] — see Custom fields |
type and objType
type is the entity kind ("Objective Group" / "Objective" / "Key Result"), so a multi-endpoint
flat-table consumer (e.g. Power BI) can group rows without inspecting which endpoint produced them. For
the Objective subtype ("Committed" / "Stretch"), request ?fields=objType.
Linked work item (card) fields¶
Returned by /objectives/{keyOrId}/linked-items and /key-results/{keyOrId}/linked-items
(both routes share one implementation and one response shape). A key or field with no value is
omitted from the JSON entirely (the API never sends null placeholders).
| Field | Type | Description |
|---|---|---|
id |
string | Internal ID of the card — use it when calling other Kendis APIs |
kendisKey |
string | The card's Kendis key (e.g. K-68). Present for cards created in Kendis |
almKey |
string | The card's key in the connected ALM tool (e.g. CAP-5). Present for synced cards; a card can carry both keys |
title |
string | Card title as shown on the board |
description |
string | Card description; may contain HTML formatting as stored. Omitted when empty |
cardType |
string | Card kind (e.g. Feature, Epic) — from the ALM issue type for synced cards, otherwise the Kendis item type |
status |
object | { id, status, category } — category is the normalized ToDo / InProgress / Done / Misc bucket after any release-train-specific status mapping |
storyPoints |
number | The card's own estimate; 0.0 when not estimated |
url |
string | Deep link to the card in the ALM tool. Synced cards only |
releaseTrain |
object | { id, title } of the release train (ART) the card is linked to the Objective under — the context children and progress are resolved in |
createdOn / updatedOn |
number | Unix timestamps in milliseconds — see converting to a readable date |
customFields |
array | Every custom field configured for cards — always the full configured list, in configured order (see below) |
childrenSummary |
object | Only with expand=children — see below |
children |
array | Only with expand=children — the card's full child hierarchy tree (see below) |
childrenError |
boolean | Only with expand=children, and only on failure: true when the server could not resolve this card's children (the card then has an empty children array and no childrenSummary). Absent on success |
Card custom field entries¶
One entry per configured field; a card with no stored value still gets the entry, just without
the value key. Values are shaped by type exactly as described under
Custom fields — userpicker is restricted to { id, fullName }, link URLs pass
a scheme allow-list, and unrecognised shapes are omitted rather than passed through raw.
| Field | Type | Description |
|---|---|---|
id |
string | Custom field definition ID |
title |
string | Field name as configured by the admin |
type |
string | Field input type (singleselect, multiselect, datepicker, userpicker, link, text, number, …) |
value |
varies | The stored value, type-shaped. Omitted when the card has no value for this field |
Children summary fields¶
Percentages are computed from the lowest-level items in the tree only (items with no further
children — for a Capability that means the Stories at the bottom, not the Epics and Features in
between). Items whose status category is Misc are listed in the tree but excluded from the math.
| Field | Type | Description |
|---|---|---|
totalItems |
int | How many lowest-level child items count toward progress |
doneItems |
int | How many of those are in a Done-category status |
totalStoryPoints |
number | Sum of the counted children's story points |
doneStoryPoints |
number | Story points of the Done children |
progressPct |
number | doneItems / totalItems × 100, rounded to 2 decimals |
progressPctByStoryPoints |
number | doneStoryPoints / totalStoryPoints × 100, rounded to 2 decimals |
Child item fields¶
children holds the card's direct children; every node nests its own children array, level
by level down to the bottom of the hierarchy. An empty children array marks a lowest-level item.
| Field | Type | Description |
|---|---|---|
id |
string | Internal ID of the child item |
kendisKey / almKey |
string | The child's Kendis / ALM key, when it has one |
title |
string | Child title |
status |
object | { id, status, category } with the release train's status-category mapping applied |
storyPoints |
number | The child's estimate; 0.0 when not estimated |
url |
string | Deep link in the ALM tool. Synced items only |
children |
array | This node's own children, same shape — empty when at the bottom |
Completion criteria values¶
These appear in the completionCriteria field on Objectives and Objective Groups:
| Value | Description |
|---|---|
ROLLUP_BY_STATUS |
Completion based on done/total leaf-level children by status |
ROLLUP_BY_STORY_POINTS |
Completion based on done/total story points of leaf-level children |
LINKED_ITEM_STATUS |
Completion based on status of directly linked items |
CHILDREN_LINKED_ITEM_STATUS |
Completion based on children of linked items by status |
CHILDREN_LINKED_ITEM_ESTIMATE |
Completion based on children of linked items by estimate |
Custom fields¶
When ?fields=all or ?fields=customFields is requested, custom fields defined in the objective layout are
returned as an array. Each entry has { id, title, type, value }. The type is the field's persisted type
token (lowercased); the value shape depends on the type.
"customFields": [
{ "id": "64f1a2b3...", "title": "Priority Score", "type": "textfield", "value": "85" },
{ "id": "64f1a2b4...", "title": "Team Lead", "type": "userpicker", "value": { "id": "690cb37331dd81412133d626", "fullName": "Jane Doe" } },
{ "id": "64f1a2b5...", "title": "Tags", "type": "multiselect","value": ["Backend", "Infrastructure"] },
{ "id": "64f1a2b6...", "title": "Target Date", "type": "datepicker", "value": "2026-03-25T11:43:00.000Z" }
]
type |
value shape |
Notes |
|---|---|---|
textfield |
string | Plain text as-is |
simpleEditor |
string | Rich-text source as-is |
singleselect |
string | The selected option's title (not the option object) |
multiselect |
array of strings | Array of selected option titles |
datepicker |
string (ISO 8601) | UTC ISO timestamp, e.g. "2026-03-25T11:43:00.000Z" |
userpicker |
object | { id, fullName } only — matching the top-level responsible field |
status |
string | The status title |
colorpicker |
string | Colour value (hex / CSS) |
image-uploader |
string | Image URL or identifier as stored |
If the objective layout has no custom fields defined, the array is empty. Custom fields the user hasn't filled
in are omitted (the API does not emit value: null entries).
Custom-field value shapes
userpicker values always return { id, fullName }, matching the dedicated top-level
responsible field. Field types not listed in the table above return null — build consumers
against the documented shapes only.