Home Platform Decentralized Identity

W3C-Compliant Decentralized Identifiers

Every AI agent deserves an identity it owns — not one rented from a vendor. DAT implements the W3C DID specification so your agents carry portable, cryptographically verifiable identities that work across platforms, chains, and organizations.

The did:dat Method

A formal W3C DID method specification purpose-built for AI agents, organizations, humans, and verifiers.

Self-Sovereign Identity for Machines

APIs keys expire. OAuth tokens can be revoked by a third party. Platform accounts disappear when the vendor shuts down. Decentralized Identifiers solve all of this. A DID is an identifier that the agent controls, anchored to cryptographic keys that only the agent holds. No issuer can revoke it. No platform migration can break it.

  • 4 DID Types — Agent, Organization, Human, and Verifier identities each have distinct syntax and capabilities
  • 3 Networks — Mainnet for production, Testnet for staging, Devnet for local development. Same DID format, different resolution contexts
  • Full CRUD — Create, resolve, update, and deactivate DIDs through a standards-compliant REST API
  • W3C Resolution Metadata — Every resolution response includes created, updated, and deactivated timestamps per the W3C spec
did:dat Method Syntax (ABNF)
==============================

did-dat = "did:dat:" network ":" id
network = "mainnet" / "testnet"
        / "devnet"
id      = type "_" unique
type    = "agent" / "org" / "human"
        / "verifier"
unique  = 16*HEX

Examples:
  did:dat:mainnet:agent_e041182e...
  did:dat:testnet:org_d7fe3f07...
  did:dat:mainnet:human_a1b2c3d4...
  did:dat:testnet:verifier_f9e8d7...

API:
  POST   /api/v1/agents      (create)
  GET    /api/v1/did/:did     (resolve)
  PUT    /api/v1/did/:did     (update)
  DELETE /api/v1/did/:did     (deactivate)
  GET    /api/v1/did/:did/resolve
         (W3C Resolution Result)

Rich DID Documents

Each DID resolves to a document containing everything needed to verify, communicate with, and authorize an agent.

Everything a Verifier Needs, Nothing They Don't

A DID Document is the agent's public profile — its cryptographic keys, service endpoints, and capabilities. When another agent or service needs to verify a request, they resolve the DID, extract the public key, and check the signature. No API calls to a central authority. No token exchange. Just math.

  • Ed25519 Verification Keys — Fast, compact, quantum-resistant-ready. Keys are embedded directly in the DID Document for offline verification
  • Service Endpoints — The agent's API URL, MCP tool server, and A2A protocol endpoint are all discoverable from the DID Document
  • Capability DelegationcapabilityInvocation and capabilityDelegation fields specify which keys can perform actions and delegate authority
  • Portable Across Platforms — The same DID works on DAT, on Ethereum (via the ERC-8004 bridge), and on any W3C-compatible verifier
DID Document (resolved)
==============================

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/
     ed25519-2020/v1"
  ],
  "id": "did:dat:testnet:agent_e041...",
  "verificationMethod": [{
    "id": "...#key-1",
    "type": "Ed25519VerificationKey2020",
    "controller": "did:dat:testnet:...",
    "publicKeyMultibase": "z6Mkf5r..."
  }],
  "authentication": ["...#key-1"],
  "capabilityInvocation": ["...#key-1"],
  "capabilityDelegation": ["...#key-1"],
  "service": [{
    "id": "...#agent-api",
    "type": "AgentService",
    "serviceEndpoint":
      "https://www.datops.ai/..."
  }]
}

Cryptographic Request Signing

Every outgoing request is signed. Every incoming request is verified. No shared secrets, no bearer tokens, no trust assumptions.

Signatures That Prove Who Sent the Request

Bearer tokens can be stolen. API keys can be leaked. Shared secrets are shared by definition. DAT agents sign every outgoing request with their Ed25519 private key and include the signature, timestamp, and nonce in HTTP headers. The receiving service resolves the sender's DID, extracts the public key, and verifies — all without contacting any central authority.

  • X-DAT-Signature Header — Ed25519 signature over the canonical request payload (method + path + body + timestamp + nonce)
  • Replay Protection — Timestamp and nonce prevent replay attacks. Requests older than 5 minutes are rejected
  • Key Encryption at Rest — Private keys are encrypted with AES-256-GCM and HKDF-SHA256 before storage. Even a database breach doesn't expose signing keys
  • Trust Inflation Prevention — Receiving agents independently recompute trust claims. Forged effective-trust values are detected and rejected within a 2-point tolerance
Request Signing Flow
==============================

Outgoing Request:
  POST /a2a/tasks/receive
  X-DAT-Agent-DID: did:dat:...
  X-DAT-Signature: a3f8b2c1...
  X-DAT-Timestamp: 1709571234
  X-DAT-Nonce: 7f3a9b2e...

Signing Payload (canonical):
  method + path + body
  + timestamp + nonce
  -> Ed25519.sign(privateKey)

Verification (receiver):
  1. Extract DID from header
  2. Resolve DID Document (cached)
  3. Get publicKeyMultibase
  4. Verify Ed25519 signature
  5. Check timestamp < 5 min old
  6. Check nonce not reused
  -> Accept or reject

Key Storage:
  Private key at rest:
  AES-256-GCM + HKDF-SHA256
  -> encrypted in Redis
  -> decrypted only in memory
W3C
Spec Compliant
4
DID Types
Ed25519
Signature Scheme
CRUD
Full Lifecycle

Give Your Agents an Identity They Own

No vendor lock-in. No expiring tokens. Just a W3C-standard identifier your agents control forever.