01 - Data Model Specification

March 25, 2026 ยท View on GitHub

This document details the JSON schema formats that define the Open Agent Trust Registry. The registry represents a single signed document containing a dictionary of trusted attestation issuers.

1. Registry Manifest (manifest.json)

The single signed document containing all trusted issuers.

{
  "schema_version": "1.0.0",
  "registry_id": "open-trust-registry",
  "generated_at": "2026-03-15T12:00:00Z",
  "expires_at": "2026-03-16T12:00:00Z",
  "entries": [ ... ],
  "signature": {
    "algorithm": "Ed25519",
    "kid": "registry-root-2026-03",
    "value": "base64-encoded-signature"
  }
}
FieldTypeDescription
schema_versionsemverSchema version for backward compatibility
registry_idstringCanonical identifier for this registry
generated_atISO 8601When this snapshot was produced
expires_atISO 8601Mirrors must not serve this snapshot after this time (max 24h window)
entriesarrayArray of IssuerEntry objects
signatureobjectRegistry maintainer signature over the canonical JSON of all other fields

Signature Canonicalization

The signed bytes for both manifest.json and revocations.json are produced as follows:

  1. Remove the top-level signature field entirely.
  2. Canonicalize the remaining JSON using RFC 8785 JSON Canonicalization Scheme (JCS).
  3. UTF-8 encode the canonical JSON bytes.
  4. Sign those bytes with the active Ed25519 root key referenced by signature.kid.

Clients MUST reconstruct the same canonical byte stream before verifying the signature.

1.1 Root Trust Anchor (root-keys.json)

Clients bootstrap trust from a checked-in root key set:

{
  "schema_version": "1.0.0",
  "registry_id": "open-trust-registry",
  "generated_at": "2026-03-24T00:00:00Z",
  "keys": [
    {
      "kid": "registry-root-2026-03",
      "algorithm": "Ed25519",
      "public_key": "base64url-ed25519-public-key",
      "status": "active",
      "not_before": "2026-03-24T00:00:00Z",
      "not_after": null
    }
  ]
}

Clients MUST reject signed artifacts whose signature.kid is missing from root-keys.json, not yet valid, expired, or retired.

2. Issuer Entry

Each entry models one trusted attestation issuer.

{
  "issuer_id": "acme-agent-runtime",
  "display_name": "Acme Agent Runtime",
  "website": "https://acme.example.com",
  "security_contact": "security@acme.example.com",
  "status": "active",
  "added_at": "2026-03-15T00:00:00Z",
  "last_verified": "2026-03-15T00:00:00Z",
  "public_keys": [ ... ],
  "capabilities": {
    "supervision_model": "tiered",
    "audit_logging": true,
    "immutable_audit": true,
    "attestation_format": "jwt",
    "max_attestation_ttl_seconds": 3600,
    "capabilities_verified": false
  },
  "endpoints": {
    "attestation_verify": "https://api.acme.example.com/v1/identity/verify",
    "revocation_list": "https://api.acme.example.com/v1/identity/revocations"
  }
}
FieldTypeRequiredDescription
issuer_idstringyesGlobally unique identifier. Lowercase alphanumeric + hyphens.
display_namestringyesHuman-readable name
websiteURLyesIssuer's public website
security_contactemailyesSecurity disclosure contact
statusenumyesactive, suspended, revoked
added_atISO 8601yesWhen issuer was added to registry
last_verifiedISO 8601yesLast time issuer passed verification check
public_keysarrayyesArray of PublicKey objects (at least one active)
capabilitiesobjectyesSelf-declared capabilities of the runtime (see Capabilities sub-fields below)
endpointsobjectnoOptional verification/revocation endpoints

2.1 Capabilities Sub-fields

FieldTypeDescription
supervision_modelstringHuman oversight model (e.g. "tiered", "full", "autonomous")
audit_loggingbooleanWhether the runtime maintains audit logs of agent actions
immutable_auditbooleanWhether the audit log is write-once / tamper-evident
attestation_formatstringToken format produced by the runtime (e.g. "jwt")
max_attestation_ttl_secondsintegerMaximum lifetime of any issued attestation, in seconds
capabilities_verifiedbooleanfalse for all new registrations (automated Tier 1). Community auditors may open a PR setting this to true (Tier 2 review) after independently verifying the above claims. Services may use this flag to apply differentiated trust policies (see Governance Tier 2).

3. Public Key Entry

{
  "kid": "acme-2026-03",
  "algorithm": "Ed25519",
  "public_key": "base64url-encoded-32-bytes",
  "status": "active",
  "issued_at": "2026-03-15T00:00:00Z",
  "expires_at": "2027-03-15T00:00:00Z",
  "deprecated_at": null,
  "revoked_at": null
}
FieldTypeDescription
kidstringKey identifier, unique within issuer. Referenced in attestation headers.
algorithmenumEd25519 (required support), ECDSA-P256 (optional support)
public_keystringBase64url-encoded public key bytes
statusenumactive, deprecated, revoked
issued_atISO 8601Key creation time
expires_atISO 8601Key expiry (max 2 years from issuance)
deprecated_atISO 8601When key was deprecated (still valid for verification during grace period)
revoked_atISO 8601When key was revoked (no longer valid for any verification)