Issue policy compliance certificate
Issues a revocable ProjectComplianceV1 credential, signed by the platform DID, stating that the project complies with the policy. It cites every governance statement recorded against the policy in the project, names the caller's DID as the one who authorized it, and expires at expiryDate. The caller needs create_credentials on the project.
post
https://<host>/gov/v1/policy/compliance/{project_uuid}bash
curl --request POST \
--url 'https://<host>/gov/v1/policy/compliance/{project_uuid}' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{"expiryDate":"2030-07-04T23:59:59Z","policyCid":"policy_cid","subjectCid":"subject_cid"}'javascript
const response = await fetch("https://<host>/gov/v1/policy/compliance/{project_uuid}", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_cid"
})
});
const data = await response.json();typescript
interface CertificateIssueResponse {
credential: Record<string, unknown>;
credentialId: string;
sourceCid: string;
}
const response = await fetch("https://<host>/gov/v1/policy/compliance/{project_uuid}", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_cid"
})
});
if (!response.ok) throw new Error(`${response.status} ${response.statusText}`);
const data: CertificateIssueResponse = await response.json();python
import requests
response = requests.post(
"https://<host>/gov/v1/policy/compliance/{project_uuid}",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_cid",
},
)
response.raise_for_status()
print(response.json())go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_cid"
}`)
req, err := http.NewRequest(http.MethodPost, "https://<host>/gov/v1/policy/compliance/{project_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/policy/compliance/{project_uuid}"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_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.Post, "https://<host>/gov/v1/policy/compliance/{project_uuid}");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "<token>");
request.Content = new StringContent("""
{
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_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/policy/compliance/{project_uuid}');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer <token>',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_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/policy/compliance/{project_uuid}")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = <<~'JSON'
{
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_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()
.post("https://<host>/gov/v1/policy/compliance/{project_uuid}")
.header("Authorization", "Bearer <token>")
.json(&json!({
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_cid"
}))
.send()
.await?;
println!("{} {}", response.status(), response.text().await?);
Ok(())
}Authorizations
BearerAuth· HTTP bearer (JWT)
Parameters
Path parameters
| Name | Type | Description |
|---|---|---|
project_uuidrequired | string | Project UUID |
Request bodyrequired
application/json
expiryDatestringrequiredpolicyCidstringrequiredsubjectCidstringrequired
Examplejson
{
"expiryDate": "2030-07-04T23:59:59Z",
"policyCid": "policy_cid",
"subjectCid": "subject_cid"
}Responses
200Policy compliance certificate issued
application/json
credentialobjectrequiredcredentialIdstringrequiredsourceCidstringrequired
Examplejson
{
"credential": {},
"credentialId": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"sourceCid": "bafybeibwzifp5oc5mirxgcq"
}400The policyCid or subjectCid is empty, or the project UUID or expiryDate does not parse
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}401Missing or invalid bearer token
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}403Caller lacks create_credentials on the project
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}500Internal error
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}503Auth Service or blob storage unavailable
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}