Allocate credential status
Adds a revocation status entry to a verifiable credential, allocating it a slot in the issuer's bitstring status list, and returns the credential with its credentialStatus. Any proof, jws or jwt the credential carries is removed, since it would no longer verify. Allocating again for the same credential id and issuer reuses the slot already allocated. The caller needs create_credentials in at least one project.
post
https://<host>/credentials/v1/allocatebash
curl --request POST \
--url 'https://<host>/credentials/v1/allocate' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{"@context":["https://www.w3.org/ns/credentials/v2","https://w3id.org/security/v2"],"credentialSubject":{"id":"urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"},"id":"urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8","issuer":"did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS","type":["VerifiableCredential"],"validFrom":"2025-10-02T20:33:12Z"}'javascript
const response = await fetch("https://<host>/credentials/v1/allocate", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
})
});
const data = await response.json();typescript
const response = await fetch("https://<host>/credentials/v1/allocate", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
})
});
if (!response.ok) throw new Error(`${response.status} ${response.statusText}`);
const data: unknown = await response.json();python
import requests
response = requests.post(
"https://<host>/credentials/v1/allocate",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2",
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4",
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential",
],
"validFrom": "2025-10-02T20:33:12Z",
},
)
response.raise_for_status()
print(response.json())go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
}`)
req, err := http.NewRequest(http.MethodPost, "https://<host>/credentials/v1/allocate", 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>/credentials/v1/allocate"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
}
"""))
.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>/credentials/v1/allocate");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "<token>");
request.Content = new StringContent("""
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
}
""", 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>/credentials/v1/allocate');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer <token>',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
}
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>/credentials/v1/allocate")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = <<~'JSON'
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
}
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>/credentials/v1/allocate")
.header("Authorization", "Bearer <token>")
.json(&json!({
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
}))
.send()
.await?;
println!("{} {}", response.status(), response.text().await?);
Ok(())
}Authorizations
BearerAuth· HTTP bearer (JWT)
Request bodyrequired
application/json
any
Examplejson
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/security/v2"
],
"credentialSubject": {
"id": "urn:cid:bagb6qaq6edqdm7xkmolcxwdxx2ivcxsrcv6gv5nbwk3acrnclfresrjfwqwc4"
},
"id": "urn:uuid:aa115482-3a7d-498a-a05c-983722b501f8",
"issuer": "did:key:z6MknhUHrjoPhJVL1bi6JbbesdJCtWmgzk1o7yS66GMY5bnS",
"type": [
"VerifiableCredential"
],
"validFrom": "2025-10-02T20:33:12Z"
}Responses
200Credential updated with credentialStatus entries
application/json
any
400The credential is not a JSON object, or has no id or issuer
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 holds create_credentials in no 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 unavailable
application/json
callstackobjectShow properties
object | nullerrorstringrequired
Examplejson
{
"callstack": {},
"error": "string"
}