EQTY LabDocs

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.

posthttps://<host>/credentials/v1/allocate
bash
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
  • callstackobject
    Show properties

    object | null

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

401Missing or invalid bearer token

application/json
  • callstackobject
    Show properties

    object | null

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

403Caller holds create_credentials in no project

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"
}