DID Attributes

View as Markdown
When to use

You want to attach a small piece of structured data to your DID — e.g. a service URL, a name, a hash — without modifying the DID Document directly. This mirrors the ERC-1056 attribute mechanism: signed key/value pairs anchored on chain.

Before you begin
  • You own the DID.
  • The attribute name is short (≤32 bytes) and meaningful.
Steps
  1. Open /dids/:did and scroll to Attributes.
  2. Click Set attribute.
  3. Enter:
    • Name — e.g. did/svc/HubService, did/auth/email.
    • Value — string or hex-encoded bytes.
    • Validity — seconds.
  4. Save. Calls POST /api/v1/dids/{did}/attributes (did.go:369).
API & SDK
cURL — setcURL — revoke
$curl -X POST https://adid.dev/api/v1/dids/did:adi:0x9a2c.../attributes \
> -H "Authorization: Bearer $ACCESS_TOKEN" \
> -H "Content-Type: application/json" \
> -d '{
> "name":"did/svc/AgentCard",
> "value":"https://my.agent/.well-known/agent.json",
> "validity":2592000
> }'
$curl -X DELETE https://adid.dev/api/v1/dids/did:adi:0x9a2c.../attributes \
> -H "Authorization: Bearer $ACCESS_TOKEN" \
> -H "Content-Type: application/json" \
> -d '{
> "name":"did/svc/AgentCard"
> }'
Verify

Resolve the DID; the attribute is exposed via the didDocumentMetadata.attributes array (or whatever the resolver returns — see §3.1.9).

Troubleshooting

If a value isn’t appearing, the most common cause is a stale cache. Force a re-resolve with:

$curl https://adid.dev/api/v1/dids/resolve/did:adi:0x9a2c...?refresh=true

3.1.9. Universal DID Resolver Tool ##### 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.