Quickstart
The public API needs no account and no API key. Base URL: https://did.is/api.
-
Resolve an identifier
Terminal window curl https://did.is/api/v1/resolve/did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doKTerminal window npm install @didis/clientimport { DidisClient } from "@didis/client";const didis = new DidisClient(); // https://did.is/apiconst r = await didis.resolve("did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK");console.log(r.verdict.outcome, "-", r.verdict.headline);Terminal window pip install didis-pyfrom didis import DidisClientwith DidisClient() as didis:r = didis.resolve("did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK")print(r["verdict"]["outcome"], "-", r["verdict"]["headline"])Terminal window cargo add reqwest --features jsoncargo add serde_jsoncargo add tokio --features full#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> {let r: serde_json::Value = reqwest::get("https://did.is/api/v1/resolve/did%3Akey%3Az6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK").await?.error_for_status()?.json().await?;println!("{} - {}", r["verdict"]["outcome"], r["verdict"]["headline"]);Ok(())} -
Read the verdict
The response starts with a verdict:
"verdict": {"outcome": "RESOLVED","headline": "Cryptographically controlled via Ed25519.","statements": ["Self-certifying: not bound to any origin.", "Organization not established."]}outcomeisRESOLVED,RESOLVED_WITH_WARNINGSorDEACTIVATED. -
Read the evidence dimensions
dimensionsis an array of seven entries in a fixed order. Each one hasid,label,state,statement,provesanddoesNotProve:{"id": "integrity","label": "Document integrity","state": "SELF_CERTIFYING","statement": "The document is derived deterministically from the identifier itself.","proves": "The document is exactly what the identifier encodes.","doesNotProve": "Who holds the private key."}Next, try a
did:webidentifier such asdid:web:did.is, where origin binding and TLS are checked. See Core concepts for every state. -
Handle errors
Errors are RFC 9457 problem objects with a stable
code:Terminal window curl -i https://did.is/api/v1/resolve/did:example:123HTTP/2 501content-type: application/problem+json{"type":"https://www.w3.org/ns/did#METHOD_NOT_SUPPORTED","title":"DID method not supported","status":501,"code":"METHOD_NOT_SUPPORTED","detail":"did:example is not supported (supported: did:key, did:jwk, did:web, did:webvh)", "trace":[…]}The SDKs raise
DidisErrorwithstatusandproblem. On429the SDKs (0.2.4 or later) wait forRetry-Afterand retry up to twice on their own; with curl, wait that many seconds yourself. See Errors and rate limits.
- First recipes: accept a partner’s DID, accept a credential, allow an agent’s tool call — complete programs.
- Resolution and dereferencing: W3C output, DID URLs, history and diffs.
- Credentials: verify a verifiable credential.
- Agent trust APIs: MCP, A2A and delegation receipts.