Skip to documentation

OKRs

OKRs describe measurable product outcomes for a workspace. Use these endpoints to keep objectives, key results, product links, and project links synchronized with external planning systems.

5 endpoints

GET

List all OKRs

GET /external/v1/okrs

List OKRs in the current workspace. Results include product ids and key-result project ids.

Requirements

API scopes required:
okrs:read

Request

Parameters

NameTypeDescription
limit numberMaximum number of OKRs to return.
offset numberNumber of OKRs to skip.

Responses

200
Success

OKRs were successfully retrieved.

Schema
Array<OKR>

Example Request

GET
/external/v1/okrs
curl
curl -X GET 'https://zentrik.ai/api/external/v1/okrs?limit=20' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Example Response

200 OK
json
[
  {
    "id": "okr-uuid",
    "objective": "Increase activation for self-serve teams",
    "priority": 1,
    "workspaceId": "workspace-uuid",
    "productIds": [
      "product-uuid"
    ],
    "keyResults": [
      {
        "id": "key-result-uuid",
        "name": "Lift week-one activation from 42% to 55%",
        "projectIds": [
          "project-uuid"
        ],
        "createdAt": "2026-05-14T10:00:00Z",
        "updatedAt": "2026-05-14T10:00:00Z"
      }
    ],
    "createdAt": "2026-05-14T10:00:00Z",
    "updatedAt": "2026-05-14T10:00:00Z"
  }
]
GET

Get one OKR

GET /external/v1/okrs/:id

Retrieve one OKR from the current workspace.

Requirements

API scopes required:
okrs:read

Request

Parameters

NameTypeDescription
id *uuidThe OKR UUID.

Responses

200
Success

The OKR was successfully retrieved.

Schema
404
Not Found

No OKR found with the provided id.

Example Request

GET
/external/v1/okrs/:id
curl
curl -X GET https://zentrik.ai/api/external/v1/okrs/okr-uuid \
  -H 'Authorization: Bearer YOUR_API_KEY'

Example Response

200 OK
json
{
  "id": "okr-uuid",
  "objective": "Increase activation for self-serve teams",
  "priority": 1,
  "workspaceId": "workspace-uuid",
  "productIds": [
    "product-uuid"
  ],
  "keyResults": [
    {
      "id": "key-result-uuid",
      "name": "Lift week-one activation from 42% to 55%",
      "projectIds": [
        "project-uuid"
      ],
      "createdAt": "2026-05-14T10:00:00Z",
      "updatedAt": "2026-05-14T10:00:00Z"
    }
  ],
  "createdAt": "2026-05-14T10:00:00Z",
  "updatedAt": "2026-05-14T10:00:00Z"
}
POST

Create an OKR

POST /external/v1/okrs

Create an OKR. Product and project ids must belong to the API key workspace.

Requirements

API scopes required:
okrs:write

Request

Request body (application/json)

objectivestring
Required

Outcome-oriented objective.

prioritynumber
Required

Numeric priority used by planning surfaces.

productIdsuuid[]

Products this OKR supports.

keyResultsobject[]
Required

Array of { name, projectIds? } key results.

Responses

201
Created

The OKR was successfully created.

Schema

Example Request

POST
/external/v1/okrs
json
{
  "objective": "Increase activation for self-serve teams",
  "priority": 1,
  "productIds": [
    "product-uuid"
  ],
  "keyResults": [
    {
      "name": "Lift week-one activation from 42% to 55%",
      "projectIds": [
        "project-uuid"
      ]
    }
  ]
}

Example Response

201 Created
json
{
  "id": "okr-uuid",
  "objective": "Increase activation for self-serve teams",
  "priority": 1,
  "workspaceId": "workspace-uuid",
  "productIds": [
    "product-uuid"
  ],
  "keyResults": [
    {
      "id": "key-result-uuid",
      "name": "Lift week-one activation from 42% to 55%",
      "projectIds": [
        "project-uuid"
      ],
      "createdAt": "2026-05-14T10:00:00Z",
      "updatedAt": "2026-05-14T10:00:00Z"
    }
  ],
  "createdAt": "2026-05-14T10:00:00Z",
  "updatedAt": "2026-05-14T10:00:00Z"
}
PATCH

Update an OKR

PATCH /external/v1/okrs/:id

Update an OKR. When keyResults is supplied, it is treated as the full replacement list.

Requirements

API scopes required:
okrs:write

Request

Parameters

NameTypeDescription
id *uuidThe OKR UUID.

Request body (application/json)

objectivestring

Updated objective.

prioritynumber

Updated priority.

productIdsuuid[]

Replacement product links.

keyResultsobject[]

Replacement key-result list. Existing key results include id.

Responses

200
Updated

The OKR was successfully updated.

Schema

Example Request

PATCH
/external/v1/okrs/:id
curl
curl -X PATCH https://zentrik.ai/api/external/v1/okrs/okr-uuid \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"priority":2}'
DELETE

Delete an OKR

DELETE /external/v1/okrs/:id

Delete an OKR and its key results from the current workspace.

Requirements

API scopes required:
okrs:delete

Request

Parameters

NameTypeDescription
id *uuidThe OKR UUID.

Responses

200
Deleted

The OKR was successfully deleted.

Example Request

DELETE
/external/v1/okrs/:id
curl
curl -X DELETE https://zentrik.ai/api/external/v1/okrs/okr-uuid \
  -H 'Authorization: Bearer YOUR_API_KEY'

Data Models

The OKR model returns product links as ids and nests key results with their project links.

OKR Object

FieldTypeDescription
iduuidThe unique identifier for the OKR.
objectivestringOutcome-oriented objective.
prioritynumberNumeric priority used by roadmap planning surfaces.
workspaceIduuidWorkspace that owns the OKR.
productIdsuuid[]Products linked to the OKR.
keyResultsobject[]Key results with id, name, projectIds, createdAt, and updatedAt.
createdAtiso-dateTimestamp when the OKR was created.
updatedAtiso-dateTimestamp of the latest OKR update.