Quickstart (Under 5 Minutes)
1. 5-Minute Quickstart
Section titled “1. 5-Minute Quickstart”Resolve your first decentralized identifier and inspect its cryptographic evidence in under 5 minutes.
# 1. Resolve an Ed25519 did:key (instant, locally derived)curl -s "https://did.is/api/v1/resolve/did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" | jq .verdict
# 2. Resolve a domain-bound did:web (with TLS leaf inspection & DIF domain linkage)curl -s "https://did.is/api/v1/resolve/did:web:identity.foundation" | jq '{ outcome: .verdict.outcome, headline: .verdict.headline, dimensions: [.dimensions[] | {id, state, statement}]}'
# 3. W3C Standard DID Resolution v1 (CR Draft 1 Oct 2026)curl -s -H "Accept: application/did-resolution" \ "https://did.is/api/1.0/identifiers/did:web:identity.foundation" | jq .didDocumentTypeScript SDK (@didis/client)
Section titled “TypeScript SDK (@didis/client)”Zero external dependencies. Runs seamlessly on Node.js 18+, Bun, Deno, modern browsers, and edge runtimes (Cloudflare Workers, Vercel Edge).
npm install @didis/clientimport { DidisClient, DidisError } from "@didis/client";
// Initializes against the default public API (https://did.is/api)const didis = new DidisClient();
async function main() { try { const res = await didis.resolve("did:web:identity.foundation");
console.log(`Outcome: ${res.verdict.outcome}`); console.log(`Headline: ${res.verdict.headline}\n`);
console.log("Evidence Dimensions:"); for (const dim of res.dimensions) { console.log(` [${dim.state.padEnd(16)}] ${dim.label}: ${dim.statement}`); }
console.log("\nKeys:"); for (const key of res.evidence.keys) { console.log(` ${key.id} (${key.curve ?? "unknown curve"}) -> ${key.status}`); } } catch (err) { if (err instanceof DidisError) { console.error(`DID.is Error (${err.status}): [${err.problem.code}] ${err.problem.detail}`); if (err.problem.retryAfter) { console.error(`Rate limited. Retry after ${err.problem.retryAfter}s`); } } else { console.error("Network failure:", err); } }}
main();Python SDK (didis-py)
Section titled “Python SDK (didis-py)”Full sync and async support built on httpx. Fully typed for Python 3.11+.
pip install didis-pySynchronous Python Example
Section titled “Synchronous Python Example”from didis import DidisClient, DidisError
def main() -> None: # Synchronous client (defaults to https://did.is/api) with DidisClient() as client: try: res = client.resolve("did:web:identity.foundation") print(f"Outcome: {res['verdict']['outcome']}") print(f"Headline: {res['verdict']['headline']}\n")
print("Evidence Dimensions:") for dim in res["dimensions"]: print(f" [{dim['state']:<16}] {dim['label']}: {dim['statement']}")
print("\nKeys:") for key in res["evidence"]["keys"]: print(f" {key['id']} ({key.get('curve', 'unknown')}) -> {key['status']}")
except DidisError as err: print(f"DID.is Error ({err.status}): [{err.problem.get('code')}] {err.problem.get('detail')}")
if __name__ == "__main__": main()Asynchronous Python Example
Section titled “Asynchronous Python Example”import asynciofrom didis import AsyncDidisClient, DidisError
async def main() -> None: async with AsyncDidisClient() as client: try: res = await client.resolve("did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK") print(f"Resolved: {res['verdict']['headline']}") except DidisError as err: print(f"Error ({err.status}): {err.problem.get('title')}")
if __name__ == "__main__": asyncio.run(main())