List key risk indicators
GET
/risk-indicators
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Get, RequestUri = new Uri("https://api.vendorica.com/v1/risk-indicators?page=1&limit=100&sortBy=name&sortOrder=asc&isActive=true&isArchived=true"), Headers = { { "Authorization", "Bearer <token>" }, },};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "net/http" "io")
func main() {
url := "https://api.vendorica.com/v1/risk-indicators?page=1&limit=100&sortBy=name&sortOrder=asc&isActive=true&isArchived=true"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder() .url("https://api.vendorica.com/v1/risk-indicators?page=1&limit=100&sortBy=name&sortOrder=asc&isActive=true&isArchived=true") .get() .addHeader("Authorization", "Bearer <token>") .build();
Response response = client.newCall(request).execute();const url = 'https://api.vendorica.com/v1/risk-indicators?page=1&limit=100&sortBy=name&sortOrder=asc&isActive=true&isArchived=true';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}use reqwest;
#[tokio::main]pub async fn main() { let url = "https://api.vendorica.com/v1/risk-indicators";
let querystring = [ ("page", "1"), ("limit", "100"), ("sortBy", "name"), ("sortOrder", "asc"), ("isActive", "true"), ("isArchived", "true"), ];
let mut headers = reqwest::header::HeaderMap::new(); headers.insert("Authorization", "Bearer <token>".parse().unwrap());
let client = reqwest::Client::new(); let response = client.get(url) .query(&querystring) .headers(headers) .send() .await;
let results = response.unwrap() .json::<serde_json::Value>() .await .unwrap();
dbg!(results);}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.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”page
integer
limit
integer
sortBy
string
sortOrder
string
search
string
categoryId
string format: uuid
ownerUserId
string format: uuid
sourceKind
Array<string> | null
cadence
Array<string> | null
status
Array<string> | null
scenarioId
string format: uuid
isActive
string | null
isArchived
string | null
Responses
Section titled “Responses”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
sourceConfig
required
object
key
additional properties
unit
required
string
direction
required
string
amberThreshold
required
number
redThreshold
required
number
cadence
required
string
measurementWindowDays
required
integer | null
latestValue
required
number | null
latestStatus
required
string
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"}