EQTY LabDocs

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.

puthttps://<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

NameTypeDescription
assessment_uuid
required
string<uuid>

The assessment graph

Request bodyrequired

application/json
  • configurationstringrequired

    The 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
  • configurationstringrequired

    The 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
  • callstackobject
    Show properties

    object | null

  • errorstringrequired
Examplejson
{
  "callstack": {},
  "error": "string"
}

403Caller is not the Governance Service: certify_agents, which no user or API key holds, is required

application/json
  • callstackobject
    Show properties

    object | null

  • errorstringrequired
Examplejson
{
  "callstack": {},
  "error": "string"
}

404No assessment graph is registered under the UUID

application/json
  • callstackobject
    Show properties

    object | null

  • errorstringrequired
Examplejson
{
  "callstack": {},
  "error": "string"
}

422The configuration is not one the Governance Service registered

application/json
  • callstackobject
    Show properties

    object | null

  • errorstringrequired
Examplejson
{
  "callstack": {},
  "error": "string"
}

500Internal error

application/json
  • callstackobject
    Show properties

    object | null

  • errorstringrequired
Examplejson
{
  "callstack": {},
  "error": "string"
}

503Auth Service unavailable

application/json
  • callstackobject
    Show properties

    object | null

  • errorstringrequired
Examplejson
{
  "callstack": {},
  "error": "string"
}