What approving this would do
curl --request GET \
--url https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact', 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://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact"
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(string(body))
}HttpResponse<String> response = Unirest.get("https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"amount_cents": 123,
"currency": "<string>",
"rule": "<string>",
"executed": true,
"session": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"budget_cents": 123,
"spent_cents": 123,
"remaining_cents": 123,
"returns_on_deny_cents": 123,
"open_holds": 123
},
"agent": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"mode": "test",
"scopes": [
"<string>"
]
},
"windows": [
{
"kind": "velocity",
"window_seconds": 123,
"cap_cents": 123,
"spent_cents": 123,
"remaining_cents": 123
}
],
"spend_token": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount_ceiling_cents": 123,
"counterparty": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"single_use": true
}
}
}{
"error": {
"message": "<string>",
"code": "runtime_key_required"
}
}What approving this would do
Everything an approver needs to decide, before they click: the amount, the rule that held it, the budget it draws on, how much comes back if it is denied, how many other holds compete for the same budget, and every window it consumes.
Budget is already reserved while an intent is held, so approving costs no further
headroom. returns_on_deny_cents is what denying gives back.
An approver who only sees “approve $2,400?” is rubber-stamping. This is the call that fixes that.
GET
/
control
/
v1
/
workspaces
/
{workspace_slug}
/
action_intents
/
{id}
/
impact
What approving this would do
curl --request GET \
--url https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact', 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://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact"
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(string(body))
}HttpResponse<String> response = Unirest.get("https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kordio.io/control/v1/workspaces/{workspace_slug}/action_intents/{id}/impact")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"amount_cents": 123,
"currency": "<string>",
"rule": "<string>",
"executed": true,
"session": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"budget_cents": 123,
"spent_cents": 123,
"remaining_cents": 123,
"returns_on_deny_cents": 123,
"open_holds": 123
},
"agent": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"mode": "test",
"scopes": [
"<string>"
]
},
"windows": [
{
"kind": "velocity",
"window_seconds": 123,
"cap_cents": 123,
"spent_cents": 123,
"remaining_cents": 123
}
],
"spend_token": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount_ceiling_cents": 123,
"counterparty": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"single_use": true
}
}
}{
"error": {
"message": "<string>",
"code": "runtime_key_required"
}
}