Universal DID Resolver

View as Markdown
When to use

You need to fetch the DID Document for any DID — yours, someone else’s, or a DID from a different method entirely. The universal resolver is the public, no-auth endpoint that does this.

Before you begin

Nothing required. The endpoint is unauthenticated.

Steps
  1. Open the DID Resolver page in the portal (/tools/did-resolver) — or just call the endpoint directly.
  2. Paste the DID into the input field.
  3. Click Resolve.
  4. The portal calls GET /api/v1/dids/resolve/{did} (did.go:29, registered at router.go:74).
Supported methods
MethodHow it resolvesSource
did:adiDIDRegistry.resolveDID()ADI chain (cached in Postgres)
did:keyMultibase decode of public keylocal computation
did:webHTTPS GET /.well-known/did.jsonDNS + HTTPS
did:ethrERC-1056 EthereumDIDRegistryEthereum mainnet RPC
API
cURLTypeScript SDK
$curl https://adid.dev/api/v1/dids/resolve/did:adi:0x9a2c...
1// Universal resolver — works for did:adi, did:key, did:web, did:ethr.
2const { didDocument, didDocumentMetadata } =
3 await client.resolveAny('did:adi:0x9a2c...');
4
5// Or, for did:adi only (authenticated):
6// const didDocument = await client.resolveDID('did:adi:0x9a2c...');

Response shape (per W3C DID Resolution):

1{
2 "didDocument": { "@context":[...], "id":"did:adi:0x9a2c...", ... },
3 "didDocumentMetadata": { "created":"...", "updated":"...", "deactivated":false, "txHash":"0x..." },
4 "didResolutionMetadata":{ "contentType":"application/did+ld+json" }
5}
Verify

Compare the returned key fingerprint against an out-of-band channel (e.g., the issuer’s website, a printed business card). DID Documents are public, but their binding to a real-world entity is your responsibility.

Troubleshooting
CodeCauseFix
404 DID_NOT_FOUNDDID not registeredVerify spelling; check method support.
502 UPSTREAM_ERRORdid:web HTTPS fetch failedCheck the host’s /.well-known/did.json.
410 DID_DEACTIVATEDDID is deactivatedThe document is still returned but flagged.