curl --request POST \
--url https://app.kosli.com/api/v2/evaluations/{org} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"context": {
"trails": [
{
"flow": "<string>",
"trail": "<string>"
}
]
},
"policy": {
"files": {}
},
"params": {},
"decision": {
"control": "<string>",
"name": "<string>",
"flow": "<string>",
"trail": "<string>",
"fingerprint": "<string>"
}
}
'import requests
url = "https://app.kosli.com/api/v2/evaluations/{org}"
payload = {
"context": { "trails": [
{
"flow": "<string>",
"trail": "<string>"
}
] },
"policy": { "files": {} },
"params": {},
"decision": {
"control": "<string>",
"name": "<string>",
"flow": "<string>",
"trail": "<string>",
"fingerprint": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
context: {trails: [{flow: '<string>', trail: '<string>'}]},
policy: {files: {}},
params: {},
decision: {
control: '<string>',
name: '<string>',
flow: '<string>',
trail: '<string>',
fingerprint: '<string>'
}
})
};
fetch('https://app.kosli.com/api/v2/evaluations/{org}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.kosli.com/api/v2/evaluations/{org}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'context' => [
'trails' => [
[
'flow' => '<string>',
'trail' => '<string>'
]
]
],
'policy' => [
'files' => [
]
],
'params' => [
],
'decision' => [
'control' => '<string>',
'name' => '<string>',
'flow' => '<string>',
'trail' => '<string>',
'fingerprint' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.kosli.com/api/v2/evaluations/{org}"
payload := strings.NewReader("{\n \"context\": {\n \"trails\": [\n {\n \"flow\": \"<string>\",\n \"trail\": \"<string>\"\n }\n ]\n },\n \"policy\": {\n \"files\": {}\n },\n \"params\": {},\n \"decision\": {\n \"control\": \"<string>\",\n \"name\": \"<string>\",\n \"flow\": \"<string>\",\n \"trail\": \"<string>\",\n \"fingerprint\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.kosli.com/api/v2/evaluations/{org}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"context\": {\n \"trails\": [\n {\n \"flow\": \"<string>\",\n \"trail\": \"<string>\"\n }\n ]\n },\n \"policy\": {\n \"files\": {}\n },\n \"params\": {},\n \"decision\": {\n \"control\": \"<string>\",\n \"name\": \"<string>\",\n \"flow\": \"<string>\",\n \"trail\": \"<string>\",\n \"fingerprint\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/evaluations/{org}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"context\": {\n \"trails\": [\n {\n \"flow\": \"<string>\",\n \"trail\": \"<string>\"\n }\n ]\n },\n \"policy\": {\n \"files\": {}\n },\n \"params\": {},\n \"decision\": {\n \"control\": \"<string>\",\n \"name\": \"<string>\",\n \"flow\": \"<string>\",\n \"trail\": \"<string>\",\n \"fingerprint\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "pending",
"requested_at": 123,
"recorded_at": 123,
"result": {},
"error": {
"kind": "<string>",
"message": ""
},
"decision_attestation_id": "<string>"
}{
"errors": {
"email": "Field must be a valid email address",
"name": "Field cannot be empty"
},
"message": "Input payload validation failed"
}{
"message": "Trail or artifact not found"
}{
"message": "Database temporarily unavailable; retry the request."
}Create an evaluation
Beta — the Server-side evaluation feature is in beta. Requests from organizations without it enabled receive 403 Forbidden.
curl --request POST \
--url https://app.kosli.com/api/v2/evaluations/{org} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"context": {
"trails": [
{
"flow": "<string>",
"trail": "<string>"
}
]
},
"policy": {
"files": {}
},
"params": {},
"decision": {
"control": "<string>",
"name": "<string>",
"flow": "<string>",
"trail": "<string>",
"fingerprint": "<string>"
}
}
'import requests
url = "https://app.kosli.com/api/v2/evaluations/{org}"
payload = {
"context": { "trails": [
{
"flow": "<string>",
"trail": "<string>"
}
] },
"policy": { "files": {} },
"params": {},
"decision": {
"control": "<string>",
"name": "<string>",
"flow": "<string>",
"trail": "<string>",
"fingerprint": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
context: {trails: [{flow: '<string>', trail: '<string>'}]},
policy: {files: {}},
params: {},
decision: {
control: '<string>',
name: '<string>',
flow: '<string>',
trail: '<string>',
fingerprint: '<string>'
}
})
};
fetch('https://app.kosli.com/api/v2/evaluations/{org}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.kosli.com/api/v2/evaluations/{org}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'context' => [
'trails' => [
[
'flow' => '<string>',
'trail' => '<string>'
]
]
],
'policy' => [
'files' => [
]
],
'params' => [
],
'decision' => [
'control' => '<string>',
'name' => '<string>',
'flow' => '<string>',
'trail' => '<string>',
'fingerprint' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.kosli.com/api/v2/evaluations/{org}"
payload := strings.NewReader("{\n \"context\": {\n \"trails\": [\n {\n \"flow\": \"<string>\",\n \"trail\": \"<string>\"\n }\n ]\n },\n \"policy\": {\n \"files\": {}\n },\n \"params\": {},\n \"decision\": {\n \"control\": \"<string>\",\n \"name\": \"<string>\",\n \"flow\": \"<string>\",\n \"trail\": \"<string>\",\n \"fingerprint\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.kosli.com/api/v2/evaluations/{org}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"context\": {\n \"trails\": [\n {\n \"flow\": \"<string>\",\n \"trail\": \"<string>\"\n }\n ]\n },\n \"policy\": {\n \"files\": {}\n },\n \"params\": {},\n \"decision\": {\n \"control\": \"<string>\",\n \"name\": \"<string>\",\n \"flow\": \"<string>\",\n \"trail\": \"<string>\",\n \"fingerprint\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/evaluations/{org}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"context\": {\n \"trails\": [\n {\n \"flow\": \"<string>\",\n \"trail\": \"<string>\"\n }\n ]\n },\n \"policy\": {\n \"files\": {}\n },\n \"params\": {},\n \"decision\": {\n \"control\": \"<string>\",\n \"name\": \"<string>\",\n \"flow\": \"<string>\",\n \"trail\": \"<string>\",\n \"fingerprint\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "pending",
"requested_at": 123,
"recorded_at": 123,
"result": {},
"error": {
"kind": "<string>",
"message": ""
},
"decision_attestation_id": "<string>"
}{
"errors": {
"email": "Field must be a valid email address",
"name": "Field cannot be empty"
},
"message": "Input payload validation failed"
}{
"message": "Trail or artifact not found"
}{
"message": "Database temporarily unavailable; retry the request."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Values the policy reads as data.params, not enforced against it
Record the outcome as a decision against a control. Absent, the evaluation stands alone and writes nothing to a trail
Show child attributes
Show child attributes
Response
Successful Response
Server-minted id of the evaluation
Whether the evaluation has run, and if so whether it recorded a result or an error
pending, completed, failed When the evaluation was asked for
The instant on the recorded-time axis that every trail in the context resolves at
The policy's output, present only when completed
Why the evaluation failed, present only when failed
Show child attributes
Show child attributes
Id of the decision attestation this evaluation wrote, present only where one was asked for and has been written. Address it with the attestation_id filter when listing attestations