Pin agent configuration
Pins the agent configuration an assessment's submissions must name, replacing any earlier pin. Governance pins what its owner chose from the agent's observed states, once it has registered it, so a submission cannot name another registered configuration. Only the Governance Service may call it, with organization-level certify_agents.
put
https://<host>/gov/v1/agent/configuration/{assessment_uuid}bash
curl --request PUT \
--url 'https://<host>/gov/v1/agent/configuration/{assessment_uuid}' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{"configuration":"urn:cid:configuration_cid"}'javascript
const response = await fetch("https://<host>/gov/v1/agent/configuration/{assessment_uuid}", {
method: "PUT",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"configuration": "urn:cid:configuration_cid"
})
});
const data = await response.json();typescript
interface AgentConfigurationPin {
configuration: string;
}
const response = await fetch("https://<host>/gov/v1/agent/configuration/{assessment_uuid}", {
method: "PUT",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"configuration": "urn:cid:configuration_cid"
})
});
if (!response.ok) throw new Error(`${response.status} ${response.statusText}`);
const data: AgentConfigurationPin = await response.json();python
import requests
response = requests.put(
"https://<host>/gov/v1/agent/configuration/{assessment_uuid}",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"configuration": "urn:cid:configuration_cid",
},
)
response.raise_for_status()
print(response.json())go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"configuration": "urn:cid:configuration_cid"
}`)
req, err := http.NewRequest(http.MethodPut, "https://<host>/gov/v1/agent/configuration/{assessment_uuid}", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, err := io.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println(res.Status, string(data))
}java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://<host>/gov/v1/agent/configuration/{assessment_uuid}"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.method("PUT", HttpRequest.BodyPublishers.ofString("""
{
"configuration": "urn:cid:configuration_cid"
}
"""))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}csharp
using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Put, "https://<host>/gov/v1/agent/configuration/{assessment_uuid}");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "<token>");
request.Content = new StringContent("""
{
"configuration": "urn:cid:configuration_cid"
}
""", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");php
<?php
$ch = curl_init('https://<host>/gov/v1/agent/configuration/{assessment_uuid}');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer <token>',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"configuration": "urn:cid:configuration_cid"
}
JSON,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status . " " . $response . PHP_EOL;ruby
require "net/http"
uri = URI("https://<host>/gov/v1/agent/configuration/{assessment_uuid}")
request = Net::HTTP::Put.new(uri)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = <<~'JSON'
{
"configuration": "urn:cid:configuration_cid"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts "#{response.code} #{response.body}"rust
// Cargo.toml dependencies: reqwest (features "json"), serde_json, tokio (features "full")
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let response = reqwest::Client::new()
.put("https://<host>/gov/v1/agent/configuration/{assessment_uuid}")
.header("Authorization", "Bearer <token>")
.json(&json!({
"configuration": "urn:cid:configuration_cid"
}))
.send()
.await?;
println!("{} {}", response.status(), response.text().await?);
Ok(())
}Authorizations
BearerAuth· HTTP bearer (JWT)
Parameters
Path parameters
| Name | Type | Description |
|---|---|---|
assessment_uuidrequired | string<uuid> | The assessment graph |
Request bodyrequired
application/json
configurationstringrequiredThe agent configuration's urn:cid, as /gov/v1/cid/agent-configuration registered it
Examplejson
{
"configuration": "urn:cid:configuration_cid"
}Responses
200The configuration is pinned on the assessment
application/json
configurationstringrequiredThe agent configuration's urn:cid, as /gov/v1/cid/agent-configuration registered it
Examplejson
{
"configuration": "urn:cid:configuration_cid"
}401Missing or invalid bearer token
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}403Caller is not the Governance Service: certify_agents, which no user or API key holds, is required
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}404No assessment graph is registered under the UUID
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}422The configuration is not one the Governance Service registered
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}500Internal error
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}503Auth Service unavailable
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}