Skip to content

List key risk indicators

GET
/risk-indicators
curl --request GET \
--url 'https://api.vendorica.com/v1/risk-indicators?page=1&limit=100&sortBy=name&sortOrder=asc&isActive=true&isArchived=true' \
--header 'Authorization: Bearer <token>'

The KRI register, each row carrying its cached latest reading, the thresholds that reading was judged against and its direction. direction is load-bearing: it decides which side of a threshold is bad, so a reading above the red line is a breach on higher_is_worse and the healthiest state on lower_is_worse. latestStatus: "unknown" means never measured and is deliberately not green. Unlike a risk scenario, an indicator resolves its own categoryName and ownerEmail. Archived rows are hidden unless isArchived says otherwise; paginated.

page
integer
default: 1 >= 1 <= 10000
limit
integer
default: 100 >= 1 <= 500
sortBy
string
Allowed values: name displayId latestStatus latestMeasuredAt createdAt
sortOrder
string
default: desc
Allowed values: asc desc
search
string
>= 1 characters <= 255 characters
categoryId
string format: uuid
ownerUserId
string format: uuid
sourceKind
Array<string> | null
<= 100 items
Allowed values: manual test_results drift_events vendor_rating incidents report_dataset
cadence
Array<string> | null
<= 100 items
Allowed values: manual daily weekly monthly quarterly
status
Array<string> | null
<= 100 items
Allowed values: unknown green amber red
scenarioId
string format: uuid
isActive
string | null
Allowed values: true false all
isArchived
string | null
Allowed values: true false all

Success

Media typeapplication/json
object
success
required
boolean
data
required
Array<object>
object
id
required
string format: uuid
organizationId
required
string format: uuid
displayId
required
string
name
required
string
description
required
string | null
categoryId
required
string | null format: uuid
ownerUserId
required
string | null format: uuid
sourceKind
required
string
Allowed values: manual test_results drift_events vendor_rating incidents report_dataset
sourceConfig
required
object
key
additional properties
unit
required
string
Allowed values: count percent score days currency
direction
required
string
Allowed values: higher_is_worse lower_is_worse
amberThreshold
required
number
redThreshold
required
number
cadence
required
string
Allowed values: manual daily weekly monthly quarterly
measurementWindowDays
required
integer | null
latestValue
required
number | null
latestStatus
required
string
Allowed values: unknown green amber red
latestMeasuredAt
required
string | null format: date-time
nextMeasurementAt
required
string | null format: date-time
isActive
required
boolean
isArchived
required
boolean
categoryName
required
string | null
ownerEmail
required
string | null
scenarioIds
required
Array<string>
createdBy
required
string | null format: uuid
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
timestamp
required
string format: date-time
requestId
string
message
string
pagination
object
page
required
integer
limit
required
integer
total
required
integer
totalPages
required
integer
Example
{
"success": true,
"data": [
{
"id": "9318ae0f-9cd9-4e77-8f2b-909c69949f48",
"organizationId": "ea5fe67e-70f7-4534-8d24-a59541b0a343",
"displayId": "string",
"name": "string",
"description": "string",
"categoryId": "5b8aed6b-84b3-4c4b-8ef1-655842028fd4",
"ownerUserId": "bb4ddd05-e292-4205-8352-ff72c1a826c2",
"sourceKind": "manual",
"sourceConfig": {},
"unit": "count",
"direction": "higher_is_worse",
"amberThreshold": 1,
"redThreshold": 1,
"cadence": "manual",
"measurementWindowDays": 1,
"latestValue": 1,
"latestStatus": "unknown",
"latestMeasuredAt": "2026-08-19T09:41:12.004Z",
"nextMeasurementAt": "2026-08-19T09:41:12.004Z",
"isActive": true,
"isArchived": true,
"categoryName": "string",
"ownerEmail": "string",
"scenarioIds": [
"24f6009e-cb42-4594-8168-9cb598aeaaa3"
],
"createdBy": "a8fdf371-7ac6-4e09-8013-a9bec8f42fce",
"createdAt": "2026-08-19T09:41:12.004Z",
"updatedAt": "2026-08-19T09:41:12.004Z"
}
],
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H",
"message": "string",
"pagination": {
"page": 1,
"limit": 1,
"total": 1,
"totalPages": 1
}
}

Validation error

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Bad request",
"code": "BAD_REQUEST",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

Unauthorized

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Unauthorized",
"code": "UNAUTHORIZED",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

Forbidden — missing scope

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Forbidden",
"code": "FORBIDDEN",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

Not found

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Resource not found",
"code": "NOT_FOUND",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

Rate limit exceeded

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Too many requests",
"code": "TOO_MANY_REQUESTS",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}