Integration Guide

Use the machine-readable registry index to automatically configure issuers, verifiers, and wallet applications with credential metadata.

Registry Index

The registry provides a comprehensive index of all credentials at:

https://registry.siros.org/.well-known/vctm-registry.json

This JSON file contains links to all credential metadata in multiple formats, enabling automated configuration of credential ecosystems.

Index Structure

The registry index follows this structure:

{
  "$schema": "https://registry.siros.org/schemas/vctm-registry.json",
    "name": "SIROS Credential Type Registry",
  "version": "2.0",
  "url": "https://registry.siros.org",
  "organizations": [
    {
      "name": "example-org",
      "url": "https://registry.siros.org/example-org/",
      "credentials": 3
    }
  ],
  "credentials": [
    {
      "vct": "https://example.com/credentials/identity",
      "name": "Identity Credential",
      "description": "A verifiable identity credential",
      "organization": "example-org",
      "formats": {
        "vctm": {
          "url": "https://registry.siros.org/.../Identity.vctm.json",
          "type": "application/json",
          "spec": "https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/"
        },
        "mdoc": {
          "url": "https://registry.siros.org/.../Identity.mdoc.json",
          "type": "application/json",
          "spec": "https://www.iso.org/standard/69084.html",
          "doctype": "com.example.credentials.identity"
        },
        "vc": {
          "url": "https://registry.siros.org/.../Identity.vc.json",
          "type": "application/json",
          "spec": "https://www.w3.org/TR/vc-data-model-2.0/"
        }
      },
      "metadata": {
        "html": "https://registry.siros.org/.../Identity.html",
        "json": "https://registry.siros.org/.../Identity.json"
      },
      "source": {
        "repository": "https://github.com/example-org/credentials",
        "branch": "vctm"
      }
    }
  ],
  "totalCredentials": 1,
  "buildTime": "2026-02-16T12:00:00.000Z"
}

Credential Formats

Each credential may include metadata in one or more formats:

Format Key Description
SD-JWT VC vctm Verifiable Credential Type Metadata for SD-JWT VCs (IETF draft)
mso_mdoc mdoc ISO 18013-5 mobile document configuration (mDL, mID)
W3C VC vc W3C Verifiable Credentials Data Model 2.0 JSON Schema

Download Script

Use this shell script to download all credential metadata files organized by format:

#!/bin/bash
# Download all credential metadata from SIROS Registry
# Requires: curl, jq

set -e

REGISTRY_URL="https://registry.siros.org/.well-known/vctm-registry.json"
OUTPUT_DIR="${1:-credentials}"

echo "Fetching registry index..."
REGISTRY=$(curl -s "$REGISTRY_URL")

# Create output directories
mkdir -p "$OUTPUT_DIR"/{vctm,mdoc,vc}

# Parse credentials and download each format
echo "$REGISTRY" | jq -c '.credentials[]' | while read -r cred; do
    NAME=$(echo "$cred" | jq -r '.name' | tr ' ' '_')
    ORG=$(echo "$cred" | jq -r '.organization')
    
    echo "Processing: $ORG/$NAME"
    
    # Download SD-JWT VC Type Metadata (vctm)
    VCTM_URL=$(echo "$cred" | jq -r '.formats.vctm.url // empty')
    if [ -n "$VCTM_URL" ]; then
        curl -s "$VCTM_URL" -o "$OUTPUT_DIR/vctm/${ORG}_${NAME}.vctm.json"
        echo "  Downloaded: vctm"
    fi
    
    # Download mso_mdoc configuration
    MDOC_URL=$(echo "$cred" | jq -r '.formats.mdoc.url // empty')
    if [ -n "$MDOC_URL" ]; then
        curl -s "$MDOC_URL" -o "$OUTPUT_DIR/mdoc/${ORG}_${NAME}.mdoc.json"
        echo "  Downloaded: mdoc"
    fi
    
    # Download W3C VC JSON Schema
    VC_URL=$(echo "$cred" | jq -r '.formats.vc.url // empty')
    if [ -n "$VC_URL" ]; then
        curl -s "$VC_URL" -o "$OUTPUT_DIR/vc/${ORG}_${NAME}.vc.json"
        echo "  Downloaded: vc"
    fi
done

# Generate summary
TOTAL=$(echo "$REGISTRY" | jq '.totalCredentials')
echo ""
echo "Download complete!"
echo "  Total credentials: $TOTAL"
echo "  Output directory: $OUTPUT_DIR/"
ls -la "$OUTPUT_DIR"/*/ 2>/dev/null | grep -c ".json$" | xargs -I{} echo "  Files downloaded: {}"

Save this script as download-registry.sh and run:

chmod +x download-registry.sh
./download-registry.sh ./my-credentials

Using with jq

Query the registry directly with jq:

List all credential VCT URIs

curl -s https://registry.siros.org/.well-known/vctm-registry.json | \
  jq -r '.credentials[].vct'

Get all mDOC document types

curl -s https://registry.siros.org/.well-known/vctm-registry.json | \
  jq -r '.credentials[].formats.mdoc.doctype // empty' | grep -v '^$'

Find credentials by organization

curl -s https://registry.siros.org/.well-known/vctm-registry.json | \
  jq '.credentials[] | select(.organization == "leifj")'

List SD-JWT VC URLs only

curl -s https://registry.siros.org/.well-known/vctm-registry.json | \
  jq -r '.credentials[].formats.vctm.url'

Programmatic Access

The registry index can be fetched programmatically from any language:

JavaScript/Node.js

const response = await fetch(
  'https://registry.siros.org/.well-known/vctm-registry.json'
);
const registry = await response.json();

// Iterate credentials
for (const cred of registry.credentials) {
  console.log(`${cred.name}: ${cred.vct}`);
  
    // Download SD-JWT VC type metadata format
  if (cred.formats.vctm) {
    const vctm = await fetch(cred.formats.vctm.url).then(r => r.json());
        // Use credential type metadata...
  }
}

Python

import requests

registry = requests.get(
    'https://registry.siros.org/.well-known/vctm-registry.json'
).json()

# Iterate credentials
for cred in registry['credentials']:
    print(f"{cred['name']}: {cred['vct']}")
    
    # Download SD-JWT VC type metadata format
    if 'vctm' in cred['formats']:
        vctm = requests.get(cred['formats']['vctm']['url']).json()
        # Use credential type metadata...

Go

resp, _ := http.Get(
    "https://registry.siros.org/.well-known/vctm-registry.json",
)
defer resp.Body.Close()

var registry struct {
    Credentials []struct {
        VCT     string `json:"vct"`
        Name    string `json:"name"`
        Formats map[string]struct {
            URL string `json:"url"`
        } `json:"formats"`
    } `json:"credentials"`
}
json.NewDecoder(resp.Body).Decode(®istry)

for _, cred := range registry.Credentials {
    fmt.Printf("%s: %s\n", cred.Name, cred.VCT)
}

Use Cases

  • Issuer Configuration - Automatically configure credential issuance endpoints with display metadata and claim definitions
  • Verifier Setup - Pre-populate verifier applications with known credential types and their validation schemas
  • Wallet Integration - Enable wallets to discover and properly render credentials from multiple issuers
  • CI/CD Pipelines - Fetch latest credential definitions during deployment to keep systems synchronized
  • Monitoring - Track changes to credential definitions across the ecosystem using the buildTime field

Caching Considerations

The registry is rebuilt periodically. When integrating:

  • Cache responses locally to reduce API calls
  • Use the buildTime field to detect updates
  • Consider polling at reasonable intervals (e.g., hourly or daily)
  • The registry is served via GitHub Pages CDN with standard caching headers

Related Documentation