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 value (V1.1 change)
Previously type returned the raw internal type string (e.g. "Objective-Committed", "KR"). It now
returns the entity kind ("Objective Group" / "Objective" / "Key Result") so a multi-endpoint
flat-table consumer (e.g. PowerBI) can group rows without inspecting which endpoint produced them. For the
previous Objective subtype value ("Committed" / "Stretch"), request ?fields=objType. The raw
internal type string is no longer exposed.
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 — see security note below |
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).
Security note on userpicker (V1.1)
Earlier builds returned the full persisted User object for userpicker custom fields, which
inadvertently included tenant-internal data (paymentDetails, planPrice, nextPaymentDate, MFA
settings, AI-token allocations, …). From V1.1 onwards the response is restricted to { id, fullName },
matching the dedicated top-level responsible field. Any future Map-shaped field type that isn't yet
handled returns null rather than the raw persisted object — fail-safe for downstream consumers.