Skip to content

Strategic Themes & OKRs — Endpoints

Base URL: https://{yourcompany}.kendis.io/api/v1/… · Auth: HTTP Basic (email : API key). Examples use example.kendis.io. All list responses use the Data (capital D) envelope.

Common query parameters on list endpoints:

Parameter Type Required Default Description
fields string No minimal Comma-separated fields, or all
startAt int No 0 Pagination offset
pageLimit int No 50 Page size (max 50)

Detail endpoints accept only fields. All {keyOrId} parameters accept the item's key or internal ID.


1. List Portfolio Themes

GET /api/v1/portfolio-themes

GET https://example.kendis.io/api/v1/portfolio-themes?fields=all&startAt=0&pageLimit=50
Authorization: Basic <token>
{
  "startAt": 0,
  "pageLimit": 50,
  "total": 3,
  "Data": [
    { "key": "portfolio-10", "title": "Next-Gen Tech Innovation", "id": "64a1b2c3..." }
  ]
}

2. Get a single Portfolio Theme

GET /api/v1/portfolio-themes/{keyOrId}

keyOrId — the Portfolio Theme's key (e.g. portfolio-10) or internal ID.

GET https://example.kendis.io/api/v1/portfolio-themes/portfolio-10?fields=all
Authorization: Basic <token>

Returns a single Portfolio Theme object inside Data. 404 if not found.

3. List Strategic Themes in a Portfolio Theme

GET /api/v1/portfolio-themes/{keyOrId}/strategic-themes

GET https://example.kendis.io/api/v1/portfolio-themes/portfolio-14/strategic-themes?fields=all
Authorization: Basic <token>
{
  "startAt": 0, "pageLimit": 50, "total": 4,
  "Data": [
    { "id": "69a14f04...", "key": "CV-20", "title": "Digital Claims Excellence." }
  ]
}

4. List all Strategic Themes

GET /api/v1/strategic-themes

GET https://example.kendis.io/api/v1/strategic-themes?fields=all&startAt=0&pageLimit=50
Authorization: Basic <token>
{
  "startAt": 0, "pageLimit": 50, "total": 16,
  "Data": [
    {
      "id": "69a14f04...",
      "key": "CV-20",
      "title": "Digital Claims Excellence.",
      "status": { "id": "67becd5d...", "status": "In Progress" },
      "owners": ["6687db0b...", "6687db14..."]
    }
  ]
}

5. Get a single Strategic Theme

GET /api/v1/strategic-themes/{keyOrId}

keyOrId — the Strategic Theme's key (e.g. CV-20) or internal ID. Returns one object inside Data. 404 if not found.

6. List Objective Groups in a Strategic Theme

GET /api/v1/strategic-themes/{keyOrId}/objective-groups

Returns the Objective Groups within a Strategic Theme, including completion percentages.

GET https://example.kendis.io/api/v1/strategic-themes/CV-20/objective-groups?fields=all
Authorization: Basic <token>
{
  "startAt": 0, "pageLimit": 50, "total": 5,
  "Data": [
    {
      "id": "69a14f13...",
      "level": 1,
      "type": "Objective Group",
      "title": "Claims Intake Modernization",
      "completionPct": 17.79,
      "objectivesCount": 10,
      "sequence": 3490568843.0,
      "status": { "id": "6687dccb...", "status": "Planned" }
    }
  ]
}

7. Get Strategic Theme progress

GET /api/v1/strategic-themes/{keyOrId}/progress

Returns overall theme progress plus per-group progress.

GET https://example.kendis.io/api/v1/strategic-themes/CV-20/progress
Authorization: Basic <token>
{
  "Data": {
    "themeProgress": 21.58,
    "groupsProgress": {
      "69a19d4b...": 20.0,
      "69a14f13...": 14.35,
      "69a19d71...": 28.33
    }
  }
}

8. List Objectives in an Objective Group

GET /api/v1/objective-groups/{groupId}/objectives

groupId — the Objective Group's internal ID.

GET https://example.kendis.io/api/v1/objective-groups/69adc9b1.../objectives?fields=all
Authorization: Basic <token>
{
  "startAt": 0, "pageLimit": 50, "total": 4,
  "Data": [
    {
      "id": "69c91775...",
      "level": 2,
      "type": "Objective",
      "key": "OBJ-329",
      "title": "test",
      "completionPct": 30.0,
      "timePeriod": "H2 2026",
      "status": { "id": "6687dccb...", "status": "Planned" },
      "bvPlan": 0.0,
      "bvActual": 0.0,
      "completionCriteria": "ROLLUP_BY_STATUS",
      "groupName": "Temp",
      "keyResultsCount": 0,
      "linkedItems": [ { "id": "668fe17d...", "linkType": "backLogItem" } ]
    }
  ]
}

9. Get a single Objective

GET /api/v1/objectives/{keyOrId}

keyOrId — the Objective's key (e.g. OBJ-329) or internal ID.

GET https://example.kendis.io/api/v1/objectives/OBJ-329?fields=all
Authorization: Basic <token>

Returns one Objective object inside Data. 404 if not found.

10. List Key Results for an Objective

GET /api/v1/objectives/{keyOrId}/key-results

keyOrId — the Objective's key (e.g. OBJ-330) or internal ID.

GET https://example.kendis.io/api/v1/objectives/OBJ-330/key-results?fields=all
Authorization: Basic <token>
{
  "startAt": 0, "pageLimit": 50, "total": 3,
  "Data": [
    {
      "id": "69c91d12...",
      "level": 3,
      "type": "Key Result",
      "key": "KR-141",
      "title": "KR with items",
      "completionPct": 30.0,
      "criteria": "By Items",
      "timePeriod": "H2 2026",
      "status": { "id": "6687dccb...", "status": "Planned" }
    },
    {
      "id": "69c91ed2...",
      "level": 3,
      "type": "Key Result",
      "key": "KR-142",
      "title": "New KR",
      "completionPct": 28.0,
      "criteria": "Target",
      "timePeriod": "H2 2026",
      "metric": { "baseline": 50, "target": 75, "unit": "%", "current": 57 }
    }
  ]
}

11. Get a single Key Result

GET /api/v1/key-results/{keyOrId}

keyOrId — the Key Result's key (e.g. KR-141) or internal ID.

GET https://example.kendis.io/api/v1/key-results/KR-141?fields=all
Authorization: Basic <token>

Returns one Key Result object inside Data. 404 if not found.