curl --request PUT \
--url https://app.kosli.com/api/v2/rego-policies/{org}/{identifier} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"files": {},
"name": "<string>",
"description": "<string>",
"comment": ""
}
'import requests
url = "https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}"
payload = {
"files": {},
"name": "<string>",
"description": "<string>",
"comment": ""
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({files: {}, name: '<string>', description: '<string>', comment: ''})
};
fetch('https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}', 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/rego-policies/{org}/{identifier}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'files' => [
],
'name' => '<string>',
'description' => '<string>',
'comment' => ''
]),
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/rego-policies/{org}/{identifier}"
payload := strings.NewReader("{\n \"files\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"comment\": \"\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"files\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"comment\": \"\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"files\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"comment\": \"\"\n}"
response = http.request(request)
puts response.read_body{
"identifier": "<string>",
"version": 123,
"status": "pending",
"digest": "<string>",
"input_schema": "trail",
"comment": "<string>",
"created_at": 123,
"created_by": "<string>",
"validated_at": 123,
"opa_version": "<string>",
"entrypoint": "<string>",
"params_schema": {},
"error": {
"kind": "<string>",
"message": "<string>"
}
}{
"message": "Input payload validation failed"
}{
"message": "You don't have permission to access this resource"
}{
"message": "The policy bundle is over the file or byte limit"
}{
"message": "Database temporarily unavailable; retry the request."
}Publish a version of a rego policy
Beta — the Server-side evaluation feature is in beta. Requests from organizations without it enabled receive 403 Forbidden.
curl --request PUT \
--url https://app.kosli.com/api/v2/rego-policies/{org}/{identifier} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"files": {},
"name": "<string>",
"description": "<string>",
"comment": ""
}
'import requests
url = "https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}"
payload = {
"files": {},
"name": "<string>",
"description": "<string>",
"comment": ""
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({files: {}, name: '<string>', description: '<string>', comment: ''})
};
fetch('https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}', 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/rego-policies/{org}/{identifier}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'files' => [
],
'name' => '<string>',
'description' => '<string>',
'comment' => ''
]),
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/rego-policies/{org}/{identifier}"
payload := strings.NewReader("{\n \"files\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"comment\": \"\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"files\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"comment\": \"\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/rego-policies/{org}/{identifier}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"files\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"comment\": \"\"\n}"
response = http.request(request)
puts response.read_body{
"identifier": "<string>",
"version": 123,
"status": "pending",
"digest": "<string>",
"input_schema": "trail",
"comment": "<string>",
"created_at": 123,
"created_by": "<string>",
"validated_at": 123,
"opa_version": "<string>",
"entrypoint": "<string>",
"params_schema": {},
"error": {
"kind": "<string>",
"message": "<string>"
}
}{
"message": "Input payload validation failed"
}{
"message": "You don't have permission to access this resource"
}{
"message": "The policy bundle is over the file or byte limit"
}{
"message": "Database temporarily unavailable; retry the request."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Shape of the input the policy is written against: one trail, or a set of them
trail, trails Rego bundle as relative path to source; a single file is one entry
Show child attributes
Show child attributes
Display name. Omit to keep the current one; required when the policy does not exist yet, and never cleared
Omit to keep the current description, or send null to clear it
Why this version was published, kept with the version
Response
Successful Response
Identifier of the policy this version belongs to
Version number, counting up from 1
pending until the version has been validated, then valid, rejected if the policy is at fault, or failed if we are
pending, valid, rejected, failed sha256: and the hex digest of the bundle's files, which is what a decision cites
Shape of the input this version is written against
trail, trails Why this version was published
Unix timestamp the version was published at
Display name of the user who published it
Unix timestamp the version left pending
Version of OPA that validated it, absent when pending or failed
Policy package the evaluator found, present when valid
JSON Schema the policy declares for its params, present when valid and the policy declares one
Why the version is not valid, present when rejected or failed
Show child attributes
Show child attributes