{
  "openapi": "3.1.0",
  "info": {
    "title": "DID.is public API",
    "version": "1.0.0",
    "summary": "Identity, resolved. Evidence, not scores.",
    "description": "Anonymous, free DID resolution, verification and agent-trust endpoints. DID.is-native /v1 JSON HTTP API errors use RFC 9457 problems with a stable `code`. W3C DID Resolution wraps resolution errors in didResolutionMetadata.error; SSE streams emit error events after opening, and MCP uses its protocol error envelopes, not top-level problem JSON. Account authentication, edge/proxy and transport failures may use other response shapes; inspect status and content type before parsing. Budgets: standard 20 requests/min, intensive 10 requests/min per client; on 429 honour `Retry-After` (seconds). Public resolutions may appear in the identifier's public history; use the private API (project keys, console) for identifiers you must not disclose.",
    "contact": {
      "name": "DID.is",
      "url": "https://did.is/developers",
      "email": "ai@did.is"
    },
    "termsOfService": "https://did.is/legal/terms",
    "license": {
      "name": "API terms",
      "url": "https://did.is/legal/acceptable-use"
    }
  },
  "externalDocs": {
    "description": "Developer Center",
    "url": "https://did.is/developers"
  },
  "servers": [
    {
      "url": "https://did.is/api",
      "description": "Production"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Resolution",
      "description": "Resolve DIDs and DID URLs, with the W3C binding and the evidence superset."
    },
    {
      "name": "Observation",
      "description": "What DID.is has observed for an identifier over time."
    },
    {
      "name": "Credentials",
      "description": "Verify credentials and evaluate declarative policies against evidence."
    },
    {
      "name": "Agents",
      "description": "MCP and A2A inspection, delegation chains and tool authorisation."
    },
    {
      "name": "Fast verify",
      "description": "Compact verdicts for gateways and agents."
    },
    {
      "name": "Directory",
      "description": "Opt-in listings and verified control claims. Listings cannot be bought."
    },
    {
      "name": "Service",
      "description": "Health, capabilities and component status."
    }
  ],
  "paths": {
    "/1.0/identifiers/{did}": {
      "get": {
        "operationId": "w3cResolve",
        "tags": [
          "Resolution"
        ],
        "summary": "W3C DID Resolution (CR Draft)",
        "description": "DID Resolution v1 · W3C Candidate Recommendation Draft (1 Oct 2026) HTTPS binding. Accept: application/did-resolution returns the full resolution result; application/did (or */*) returns the DID document only. Errors are RFC 9457 problem objects in didResolutionMetadata.error with the specification's status codes (400 invalid DID, 404 not found, 406 representation not supported, 410 deactivated, 501 method not supported). DID URLs (fragments, ?service=, ?versionId=) are dereferenced.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#w3c-resolve"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "Raw or fully percent-encoded (did%3A…); decoded exactly once.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          },
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "application/did-resolution | application/did",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ResolutionResult or DID document",
            "content": {
              "application/did-resolution": {
                "schema": {
                  "$ref": "#/components/schemas/ResolutionResult"
                }
              },
              "application/did": {
                "schema": {
                  "$ref": "#/components/schemas/DidDocument"
                }
              }
            }
          },
          "400": {
            "description": "INVALID_DID or INVALID_DID_URL, in didResolutionMetadata.error",
            "content": {
              "application/did-resolution": {
                "schema": {
                  "type": "object",
                  "description": "DID Resolution Result with didDocument null and the problem in didResolutionMetadata.error.",
                  "required": [
                    "@context",
                    "didDocument",
                    "didResolutionMetadata",
                    "didDocumentMetadata"
                  ],
                  "properties": {
                    "@context": {
                      "type": "string"
                    },
                    "didDocument": {
                      "type": "null"
                    },
                    "didResolutionMetadata": {
                      "type": "object",
                      "required": [
                        "error"
                      ],
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/W3cProblem"
                        }
                      }
                    },
                    "didDocumentMetadata": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "NOT_FOUND, in didResolutionMetadata.error",
            "content": {
              "application/did-resolution": {
                "schema": {
                  "type": "object",
                  "description": "DID Resolution Result with didDocument null and the problem in didResolutionMetadata.error.",
                  "required": [
                    "@context",
                    "didDocument",
                    "didResolutionMetadata",
                    "didDocumentMetadata"
                  ],
                  "properties": {
                    "@context": {
                      "type": "string"
                    },
                    "didDocument": {
                      "type": "null"
                    },
                    "didResolutionMetadata": {
                      "type": "object",
                      "required": [
                        "error"
                      ],
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/W3cProblem"
                        }
                      }
                    },
                    "didDocumentMetadata": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "REPRESENTATION_NOT_SUPPORTED: the Accept header cannot be satisfied",
            "content": {
              "application/did-resolution": {
                "schema": {
                  "type": "object",
                  "description": "DID Resolution Result with didDocument null and the problem in didResolutionMetadata.error.",
                  "required": [
                    "@context",
                    "didDocument",
                    "didResolutionMetadata",
                    "didDocumentMetadata"
                  ],
                  "properties": {
                    "@context": {
                      "type": "string"
                    },
                    "didDocument": {
                      "type": "null"
                    },
                    "didResolutionMetadata": {
                      "type": "object",
                      "required": [
                        "error"
                      ],
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/W3cProblem"
                        }
                      }
                    },
                    "didDocumentMetadata": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "410": {
            "description": "DID deactivated; the resolution result is still returned.",
            "content": {
              "application/did-resolution": {
                "schema": {
                  "$ref": "#/components/schemas/ResolutionResult"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "501": {
            "description": "METHOD_NOT_SUPPORTED or FEATURE_NOT_SUPPORTED, in didResolutionMetadata.error",
            "content": {
              "application/did-resolution": {
                "schema": {
                  "type": "object",
                  "description": "DID Resolution Result with didDocument null and the problem in didResolutionMetadata.error.",
                  "required": [
                    "@context",
                    "didDocument",
                    "didResolutionMetadata",
                    "didDocumentMetadata"
                  ],
                  "properties": {
                    "@context": {
                      "type": "string"
                    },
                    "didDocument": {
                      "type": "null"
                    },
                    "didResolutionMetadata": {
                      "type": "object",
                      "required": [
                        "error"
                      ],
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/W3cProblem"
                        }
                      }
                    },
                    "didDocumentMetadata": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure (W3C status 500); the problem is in didResolutionMetadata.error.",
            "content": {
              "application/did-resolution": {
                "schema": {
                  "type": "object",
                  "description": "DID Resolution Result with didDocument null and the problem in didResolutionMetadata.error.",
                  "required": [
                    "@context",
                    "didDocument",
                    "didResolutionMetadata",
                    "didDocumentMetadata"
                  ],
                  "properties": {
                    "@context": {
                      "type": "string"
                    },
                    "didDocument": {
                      "type": "null"
                    },
                    "didResolutionMetadata": {
                      "type": "object",
                      "required": [
                        "error"
                      ],
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/W3cProblem"
                        }
                      }
                    },
                    "didDocumentMetadata": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/resolve/{did}": {
      "get": {
        "operationId": "resolve",
        "tags": [
          "Resolution"
        ],
        "summary": "Resolve with evidence",
        "description": "Superset of the W3C result: verdict (plain-language headline and statements), seven independently evaluated evidence dimensions, the evidence graph, per-stage telemetry, key/linkage/TLS/history evidence and stated limitations. No scores.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#resolve"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "The identifier to resolve.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          },
          {
            "name": "noCache",
            "in": "query",
            "required": false,
            "description": "Bypass and refresh the resolver cache.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "EnrichedResolution",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EnrichedResolution"
                },
                "examples": {
                  "resolve": {
                    "summary": "Captured current Rust serializer using synthetic local-only inputs (not a production verdict).",
                    "value": {
                      "cached": false,
                      "did": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                      "didDocument": {
                        "@context": [
                          "https://www.w3.org/ns/did/v1",
                          "https://w3id.org/security/multikey/v1"
                        ],
                        "assertionMethod": [
                          "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                        ],
                        "authentication": [
                          "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                        ],
                        "capabilityDelegation": [
                          "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                        ],
                        "capabilityInvocation": [
                          "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                        ],
                        "id": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                        "verificationMethod": [
                          {
                            "controller": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "id": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "publicKeyMultibase": "z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "type": "Multikey"
                          }
                        ]
                      },
                      "didDocumentMetadata": {},
                      "didResolutionMetadata": {
                        "contentType": "application/did",
                        "durationMs": 0,
                        "retrieved": "2026-10-30T23:27:48Z"
                      },
                      "dimensions": [
                        {
                          "doesNotProve": "Who holds the private key.",
                          "id": "integrity",
                          "label": "Document integrity",
                          "proves": "The document is exactly what the identifier encodes.",
                          "state": "SELF_CERTIFYING",
                          "statement": "The document is derived deterministically from the identifier itself."
                        },
                        {
                          "doesNotProve": "Who holds the corresponding private keys.",
                          "id": "keys",
                          "label": "Key material",
                          "proves": "The published keys are well-formed points usable for their declared relationships.",
                          "state": "ESTABLISHED",
                          "statement": "1 verification method validated (Ed25519)."
                        },
                        {
                          "doesNotProve": "That the key has not been compromised (did:key cannot rotate).",
                          "id": "control",
                          "label": "Update authority",
                          "proves": "Control is bound to one key by construction.",
                          "state": "SELF_CERTIFYING",
                          "statement": "Controlled solely by the holder of the Ed25519 private key; the identifier cannot be updated or deactivated."
                        },
                        {
                          "doesNotProve": "",
                          "id": "origin",
                          "label": "Origin binding",
                          "proves": "",
                          "state": "NOT_APPLICABLE",
                          "statement": "did:key is not bound to a web origin."
                        },
                        {
                          "doesNotProve": "",
                          "id": "transport",
                          "label": "Transport security",
                          "proves": "",
                          "state": "NOT_APPLICABLE",
                          "statement": "No network retrieval was needed."
                        },
                        {
                          "doesNotProve": "",
                          "id": "history",
                          "label": "Verifiable history",
                          "proves": "",
                          "state": "NOT_APPLICABLE",
                          "statement": "The identifier is immutable; there is no history."
                        },
                        {
                          "doesNotProve": "Who operates this identifier.",
                          "id": "organization",
                          "label": "Real-world identity",
                          "proves": "",
                          "state": "NOT_ESTABLISHED",
                          "statement": "Organization not established. DID.is does not verify legal identity or ownership claims."
                        }
                      ],
                      "evidence": {
                        "document": {
                          "alsoKnownAs": [],
                          "contexts": [
                            {
                              "known": true,
                              "name": "DID Core v1.0",
                              "uri": "https://www.w3.org/ns/did/v1"
                            },
                            {
                              "known": true,
                              "name": "Multikey",
                              "uri": "https://w3id.org/security/multikey/v1"
                            }
                          ],
                          "controllers": [],
                          "idMatches": true,
                          "jcsProfile": "rfc8785-binary64-v1",
                          "jcsSha256": "43b19be426472525efb856694fe49e74813c60e3776a0ecf9c0798e4cc7691f4",
                          "relationships": {
                            "assertionMethod": [
                              "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                            ],
                            "authentication": [
                              "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                            ],
                            "capabilityDelegation": [
                              "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                            ],
                            "capabilityInvocation": [
                              "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                            ]
                          },
                          "serviceCount": 0,
                          "verificationMethodCount": 1,
                          "warnings": []
                        },
                        "keys": [
                          {
                            "controller": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "controllerIsSubject": true,
                            "curve": "Ed25519",
                            "detail": "Ed25519 public key decoded and validated as a curve point",
                            "id": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "jwk": {
                              "crv": "Ed25519",
                              "kty": "OKP",
                              "x": "4oqJcHUzMr1y_vQT5rCy7xtKrdp6osFB8jNxKmh2s1E"
                            },
                            "jwkThumbprint": "pzVYfgjsNt5hXy1r0RbKEGAUnFm_skFdi_8SK6WNgzA",
                            "keySizeBits": 256,
                            "materialProperty": "publicKeyMultibase",
                            "multicodec": {
                              "codec": "0xed",
                              "codecName": "ed25519-pub",
                              "keyBytesHex": "e28a8970753332bd72fef413e6b0b2ef1b4aadda7aa2c141f233712a6876b351",
                              "keyLength": 32,
                              "multibaseEncoding": "base58btc",
                              "multibasePrefix": "z",
                              "varintHex": "ed01"
                            },
                            "multikey": "z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "relationships": [
                              "authentication",
                              "assertionMethod",
                              "capabilityInvocation",
                              "capabilityDelegation"
                            ],
                            "status": "VALID_KEY",
                            "type": "Multikey"
                          }
                        ],
                        "services": [],
                        "source": {
                          "kind": "LOCAL_DERIVATION",
                          "latencyMs": 0,
                          "sha256": "43b19be426472525efb856694fe49e74813c60e3776a0ecf9c0798e4cc7691f4"
                        }
                      },
                      "graph": {
                        "edges": [
                          {
                            "from": "subject",
                            "id": "subject→document:resolves to",
                            "relation": "resolves to",
                            "state": "VERIFIED",
                            "to": "document"
                          },
                          {
                            "from": "document",
                            "id": "document→key:did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ:authentication · assertionMethod · capabilityInvocation · capabilityDelegation",
                            "relation": "authentication · assertionMethod · capabilityInvocation · capabilityDelegation",
                            "state": "VERIFIED",
                            "to": "key:did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                          }
                        ],
                        "nodes": [
                          {
                            "facts": [
                              [
                                "method",
                                "key"
                              ],
                              [
                                "outcome",
                                "RESOLVED"
                              ]
                            ],
                            "id": "subject",
                            "kind": "subject",
                            "label": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "layer": 0,
                            "state": "ESTABLISHED",
                            "sublabel": "did:key"
                          },
                          {
                            "digest": "43b19be426472525efb856694fe49e74813c60e3776a0ecf9c0798e4cc7691f4",
                            "facts": [
                              [
                                "id matches DID",
                                "true"
                              ],
                              [
                                "resolves-to method",
                                "Document ID comparison, not a signature or proof of private-key control"
                              ],
                              [
                                "verification methods",
                                "1"
                              ],
                              [
                                "services",
                                "0"
                              ],
                              [
                                "warnings",
                                "0"
                              ]
                            ],
                            "id": "document",
                            "kind": "document",
                            "label": "DID document",
                            "layer": 1,
                            "state": "ESTABLISHED",
                            "sublabel": "JCS SHA-256 43b19be42647…"
                          },
                          {
                            "digest": "pzVYfgjsNt5hXy1r0RbKEGAUnFm_skFdi_8SK6WNgzA",
                            "facts": [
                              [
                                "id",
                                "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                              ],
                              [
                                "type",
                                "Multikey"
                              ],
                              [
                                "curve",
                                "Ed25519"
                              ],
                              [
                                "JWK thumbprint",
                                "pzVYfgjsNt5hXy1r0RbKEGAUnFm_skFdi_8SK6WNgzA"
                              ],
                              [
                                "relationships",
                                "authentication, assertionMethod, capabilityInvocation, capabilityDelegation"
                              ]
                            ],
                            "id": "key:did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                            "kind": "key",
                            "label": "#z6Mkuhai1adkd5vSGv…",
                            "layer": 2,
                            "state": "ESTABLISHED",
                            "sublabel": "Ed25519 · Multikey"
                          }
                        ]
                      },
                      "limitations": [
                        "DID.is reports evidence; it does not assign trust scores or verify legal identity.",
                        "Self-certifying identifiers cannot be rotated or deactivated; a compromised key compromises the DID permanently.",
                        "Linked Data proofs that require RDF canonicalization (e.g. Ed25519Signature2020) are reported as unsupported, not valid."
                      ],
                      "method": "key",
                      "observedAt": "2026-10-30T23:27:48Z",
                      "resolver": {
                        "name": "DID.is resolver-core",
                        "version": "0.1.0"
                      },
                      "trace": [
                        {
                          "detail": "method 'key' · 56 characters",
                          "durationUs": 32,
                          "label": "DID syntax (DID Core §3.1)",
                          "stage": "syntax.parse",
                          "startedUs": 15,
                          "status": "PASS"
                        },
                        {
                          "detail": "multibase 'z' (base58btc) → multicodec 0xed (ed25519-pub) → Ed25519 public key, 32 bytes, point validated",
                          "durationUs": 27,
                          "label": "Multibase and multicodec decoding",
                          "stage": "method.key.decode",
                          "startedUs": 120,
                          "status": "PASS"
                        },
                        {
                          "detail": "did:key document generated locally; no network request was made",
                          "durationUs": 0,
                          "label": "Deterministic document derivation",
                          "stage": "document.derive",
                          "startedUs": 162,
                          "status": "PASS"
                        },
                        {
                          "detail": "7 dimensions · 3 graph nodes · verdict RESOLVED",
                          "durationUs": 188,
                          "label": "Evidence assembly",
                          "stage": "evidence.assemble",
                          "startedUs": 237,
                          "status": "PASS"
                        }
                      ],
                      "verdict": {
                        "headline": "Self-certifying Ed25519 DID; private-key possession not tested.",
                        "outcome": "RESOLVED",
                        "statements": [
                          "Self-certifying: not bound to any origin.",
                          "Organization not established."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "The target resolves to a non-public address or uses a refused scheme (EGRESS_BLOCKED)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "424": {
            "description": "The remote host did not answer in time or failed: DNS, TLS, timeout (UPSTREAM_UNAVAILABLE)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/stream/{did}": {
      "get": {
        "operationId": "stream",
        "tags": [
          "Resolution"
        ],
        "summary": "Live resolution (SSE)",
        "description": "Server-sent events: one `stage` event per telemetry stage as it completes, then `result` (EnrichedResolution) or `error` (problem), then `done`.",
        "x-didis-budget": "intensive",
        "externalDocs": {
          "url": "https://did.is/developers#stream"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "The identifier to resolve.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          },
          {
            "name": "noCache",
            "in": "query",
            "required": false,
            "description": "Resolve fresh.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "text/event-stream",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string",
                  "description": "Events: stage*, then result | error, then done."
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/dereference/{didUrl}": {
      "get": {
        "operationId": "dereference",
        "tags": [
          "Resolution"
        ],
        "summary": "Dereference a DID URL",
        "description": "Selects a verification method or service by fragment, a service endpoint by ?service= (with path-traversal-safe relativeRef), or a did:webvh version by versionId / versionTime / versionNumber. Encode '#' as %23.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#dereference"
        },
        "parameters": [
          {
            "name": "didUrl",
            "in": "path",
            "required": true,
            "description": "e.g. did:web:example.com%23key-1",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          }
        ],
        "responses": {
          "200": {
            "description": "DereferencingResult",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DereferencingResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "The target resolves to a non-public address or uses a refused scheme (EGRESS_BLOCKED)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Fragment, service or version not found (NOT_FOUND)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "424": {
            "description": "The remote host did not answer in time or failed: DNS, TLS, timeout (UPSTREAM_UNAVAILABLE)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/history/{did}": {
      "get": {
        "operationId": "history",
        "tags": [
          "Observation"
        ],
        "summary": "Observation history",
        "description": "Snapshots DID.is recorded for this identifier (coalesced when unchanged). Observations are records, not proofs of history.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#history"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "The identifier.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          }
        ],
        "responses": {
          "200": {
            "description": "{ did, count, history: ObservationRecord[] }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/diff/{did}": {
      "get": {
        "operationId": "diff",
        "tags": [
          "Observation"
        ],
        "summary": "Semantic diff",
        "description": "Compares two observations: keys added, removed and rotated (same id, new material), relationship changes, services, controller, alsoKnownAs, @context and domain-binding changes. Defaults to the latest two distinct state observations. Use fromObservation/toObservation (obs:<public history id>) for precise selection, including identical hashes with different origin binding. Legacy from/to hashes must identify one row each; ambiguous hashes return 400 INVALID_REQUEST. identical describes document equality; domainBindingChanged is separate.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#diff"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "The identifier.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Older document hash.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "Newer unambiguous document hash.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fromObservation",
            "in": "query",
            "required": false,
            "description": "Older public observation reference: obs:<id>. Supply both observation parameters, without hash parameters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "toObservation",
            "in": "query",
            "required": false,
            "description": "Newer public observation reference: obs:<id>.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "SemanticDiff",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SemanticDiff"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Fewer than two distinct observations exist (NOT_FOUND)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/credentials/verify": {
      "post": {
        "operationId": "credentialsVerify",
        "tags": [
          "Credentials"
        ],
        "summary": "Verify a credential",
        "description": "Data Integrity (eddsa-jcs-2022, ecdsa-jcs-2019), VC-JWT 1.1, vc+jwt and SD-JWT VC (dc+sd-jwt, draft-19 over RFC 9901: disclosure digests, Key Binding JWT, Token Status List; disclosed values are never returned, only paths; issuer trust is reported categorically in issuerTrust and EU trusted lists are not checked; an x5c leaf must name the HTTPS iss in a DNS or URI subjectAltName and be within its validity period, else INVALID; without trustedIssuerCertificates a matching x5c signature is INDETERMINATE, never VALID). ISO mdoc is recognised and reported UNSUPPORTED. The signing key must belong to the issuer DID and be authorised for assertionMethod. Bitstring Status List entries are fetched, their list credential verified, and evaluated fail-closed. Status precedence: MALFORMED > INVALID > UNSUPPORTED > REVOKED > SUSPENDED > EXPIRED > NOT_YET_VALID > INDETERMINATE > VALID.",
        "x-didis-budget": "intensive",
        "externalDocs": {
          "url": "https://did.is/developers#credentials-verify"
        },
        "parameters": [],
        "responses": {
          "200": {
            "description": "CredentialVerification",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CredentialVerification"
                },
                "examples": {
                  "valid": {
                    "summary": "Captured current Rust serializer using synthetic local-only inputs (not a production verdict).",
                    "value": {
                      "checks": [
                        {
                          "detail": "VC Data Model 2.0 · types VerifiableCredential, EmploymentCredential",
                          "id": "structure",
                          "label": "Credential structure",
                          "status": "PASS"
                        },
                        {
                          "detail": "within its validity period",
                          "id": "validity",
                          "label": "Validity period",
                          "status": "PASS"
                        },
                        {
                          "detail": "eddsa-jcs-2022 proof verified with the issuer's Ed25519 key did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                          "id": "proof",
                          "label": "Issuer signature",
                          "status": "PASS"
                        },
                        {
                          "detail": "Self-certifying Ed25519 DID; private-key possession not tested.",
                          "id": "issuer",
                          "label": "Issuer DID resolution",
                          "status": "PASS"
                        },
                        {
                          "detail": "the credential declares no status mechanism",
                          "id": "status",
                          "label": "Revocation / suspension status",
                          "status": "SKIP"
                        }
                      ],
                      "claims": {
                        "id": "did:example:subject",
                        "role": "Engineer"
                      },
                      "credential": {
                        "@context": [
                          "https://www.w3.org/ns/credentials/v2"
                        ],
                        "credentialSubject": {
                          "id": "did:example:subject",
                          "role": "Engineer"
                        },
                        "id": "urn:uuid:7d0c4bd2-0f4e-4a43-9bd8-0b6a3c4f1a10",
                        "issuer": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                        "proof": {
                          "@context": [
                            "https://www.w3.org/ns/credentials/v2"
                          ],
                          "created": "2025-01-01T00:00:00Z",
                          "cryptosuite": "eddsa-jcs-2022",
                          "proofPurpose": "assertionMethod",
                          "proofValue": "z38QeYNeYY1L9eF2fwpwdE9eeYruzumuxjD7ngeBwSgX9gRoQ9yuR6rbda3tQCSC19sKLRXVZhYhkbmKh3tCfoUzW",
                          "type": "DataIntegrityProof",
                          "verificationMethod": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                        },
                        "type": [
                          "VerifiableCredential",
                          "EmploymentCredential"
                        ],
                        "validFrom": "2024-01-01T00:00:00Z",
                        "validUntil": "2026-10-31T23:27:48Z"
                      },
                      "dataModel": "2.0",
                      "errors": [],
                      "format": "DATA_INTEGRITY",
                      "headline": "Signature verified against did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ; no status list declared.",
                      "id": "urn:uuid:7d0c4bd2-0f4e-4a43-9bd8-0b6a3c4f1a10",
                      "issuer": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                      "issuerResolution": {
                        "detail": "Self-certifying: not bound to any origin. Organization not established.",
                        "headline": "Self-certifying Ed25519 DID; private-key possession not tested.",
                        "id": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                        "outcome": "RESOLVED"
                      },
                      "limitations": [
                        "A valid proof shows the credential was signed by a key the issuer DID authorises; it does not show the issuer is authoritative for these claims.",
                        "Linked Data proofs requiring RDF canonicalization are reported as UNSUPPORTED."
                      ],
                      "proof": {
                        "created": "2025-01-01T00:00:00Z",
                        "detail": "eddsa-jcs-2022 proof verified with the issuer's Ed25519 key did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ",
                        "format": "DATA_INTEGRITY",
                        "keyCurve": "Ed25519",
                        "proofPurpose": "assertionMethod",
                        "signedDigest": "12851c842f8b8dc587c8c28c45f31630c345c4d681052d93a4b4665fec5b389aa47ad607d7a932f42fdfb193b74fbe94d39765a841e4cdf05180d1378d6416a7",
                        "suite": "eddsa-jcs-2022",
                        "verificationMethod": "did:key:z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ#z6Mkuhai1adkd5vSGvB99B2ezAUuZtfCf3zoYRN1ZM3XU2kQ"
                      },
                      "status": "VALID",
                      "statusList": [],
                      "subject": "did:example:subject",
                      "types": [
                        "VerifiableCredential",
                        "EmploymentCredential"
                      ],
                      "valid": true,
                      "validFrom": "2024-01-01T00:00:00Z",
                      "validUntil": "2026-10-31T23:27:48Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "Body over 512 KiB",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/CredentialVerifyRequest"
                  },
                  {
                    "type": "object",
                    "description": "Bare credential JSON is also accepted; invalid credentials produce a 200 verification verdict, not an HTTP validation error."
                  },
                  {
                    "type": "string",
                    "description": "Bare compact JWT or raw credential JSON string."
                  }
                ]
              },
              "example": {
                "credential": {
                  "@context": [
                    "https://www.w3.org/ns/credentials/v2"
                  ],
                  "type": [
                    "VerifiableCredential"
                  ],
                  "issuer": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK",
                  "validFrom": "2026-01-01T00:00:00Z",
                  "credentialSubject": {
                    "id": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLdmQR63zLFKfvUwi3"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/policies/evaluate": {
      "post": {
        "operationId": "policiesEvaluate",
        "tags": [
          "Credentials"
        ],
        "summary": "Evaluate a policy",
        "description": "Evaluates declarative rules (allowedMethods, allowedCurves, minKeyBits, requireKeyRelationship, domainBinding, tlsMinDaysRemaining, linkedAccounts, verifiableHistory, maxCacheAgeSeconds, credentialStatus, credentialIssuerMustBeSubject) against observed evidence. Unevaluable rules are INDETERMINATE, never PASS. Unknown rule names or policy fields and unsupported rule values return 400 INVALID_REQUEST (RFC 9457); organizationRegistry and issuerTrustAnchor are not implemented. credentialStatus accepts only active and requires a valid credential plus complete verified active status-list evidence; a valid signature without a status mechanism is INDETERMINATE. credentialIssuerMustBeSubject requires supported proof and issuer-binding PASS evidence matching the evaluated DID; failed proofs fail and unsupported or unavailable attribution is INDETERMINATE. It establishes issuer attribution only, separate from credential validity dates and revocation/status acceptance. Empty rules remain INDETERMINATE.",
        "x-didis-budget": "intensive",
        "externalDocs": {
          "url": "https://did.is/developers#policies-evaluate"
        },
        "parameters": [],
        "responses": {
          "200": {
            "description": "{ evaluation, credential, resolution }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PolicyResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "Body over 512 KiB",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "did": {
                    "type": "string",
                    "description": "Subject DID."
                  },
                  "policy": {
                    "$ref": "#/components/schemas/PolicyDefinition"
                  },
                  "credential": {
                    "oneOf": [
                      {
                        "type": "object"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "description": "Optional credential to evaluate."
                  }
                },
                "required": [
                  "did",
                  "policy"
                ]
              },
              "example": {
                "did": "did:web:identity.foundation",
                "policy": {
                  "rules": {
                    "didResolution": "required",
                    "domainBinding": "required"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/mcp/inspect": {
      "get": {
        "operationId": "mcpInspect",
        "tags": [
          "Agents"
        ],
        "summary": "Inspect an MCP server",
        "description": "Streamable HTTP: server/discover (2026-07-28) with legacy initialize fallback; paginated tools/list; SHA-256 fingerprints of every tool definition (RFC 8785); declared annotations vs heuristic side-effect classes; risk signals; drift against the previous observation. 401 responses are reported, never bypassed.",
        "x-didis-budget": "intensive",
        "externalDocs": {
          "url": "https://did.is/developers#mcp-inspect"
        },
        "parameters": [
          {
            "name": "endpoint",
            "in": "query",
            "required": true,
            "description": "The MCP endpoint.",
            "schema": {
              "type": "string",
              "format": "uri"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "McpInspection",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpInspection"
                },
                "examples": {
                  "inspected": {
                    "summary": "Captured current Rust serializer using synthetic local-only inputs (not a production verdict).",
                    "value": {
                      "capabilities": {
                        "tools": {}
                      },
                      "checks": [
                        {
                          "detail": "inventory snapshot persisted",
                          "id": "historyPersistence",
                          "label": "History persistence",
                          "status": "PASS"
                        },
                        {
                          "detail": "no TLS (test mode)",
                          "id": "transport",
                          "label": "Transport security",
                          "status": "WARN"
                        },
                        {
                          "detail": "server/discover answered; stateless MCP 2026-07-28",
                          "id": "protocol",
                          "label": "Protocol version",
                          "status": "PASS"
                        },
                        {
                          "detail": "serverInfo 'Offline fixture' is self-reported and not authenticated",
                          "id": "identity",
                          "label": "Server identity",
                          "status": "WARN"
                        },
                        {
                          "detail": "1 tool(s); 1 with risk signals; inventory SHA-256 6220fb2282e09620",
                          "id": "inventory",
                          "label": "Tool inventory",
                          "status": "WARN"
                        },
                        {
                          "detail": "first observation; future inspections will be compared against this baseline",
                          "id": "drift",
                          "label": "Definition drift",
                          "status": "SKIP"
                        }
                      ],
                      "classCounts": {
                        "read_only": 1
                      },
                      "drift": {
                        "added": [],
                        "changed": [],
                        "removed": [],
                        "status": "FIRST_OBSERVATION"
                      },
                      "endpoint": "https://mcp.example.invalid/mcp",
                      "headline": "Offline fixture — MCP 2026-07-28 (stateless); 1 tool, 1 with risk signals; first observation.",
                      "inventoryHash": "6220fb2282e096204f4e44445059d20cdffd0e755d5e58d122ae2217b95fd272",
                      "jcsProfile": "rfc8785-binary64-v1",
                      "limitations": [
                        "Side-effect classes are DID.is heuristics over names, descriptions and schemas; declared annotations are the server's own claims.",
                        "serverInfo is self-reported; MCP has no server identity attestation.",
                        "Drift is measured against DID.is's previous observation of the same endpoint."
                      ],
                      "mode": "STATELESS",
                      "negotiatedVersion": "2026-07-28",
                      "serverInfo": {
                        "name": "Offline fixture",
                        "version": "1"
                      },
                      "status": "INSPECTED",
                      "supportedVersions": [
                        "2026-07-28"
                      ],
                      "tools": [
                        {
                          "annotations": {
                            "readOnlyHint": true
                          },
                          "declaredClass": "read_only",
                          "definitionSha256": "475cc0ce4e74217f31c88504cf382bfba76f661a7fcd4399bbd0c9811221d563",
                          "description": "Read synthetic data",
                          "drift": "FIRST_OBSERVATION",
                          "heuristicClass": "read_only",
                          "inputSchema": {
                            "type": "object"
                          },
                          "name": "read_fixture",
                          "parameters": [],
                          "riskSignals": [
                            "no input schema properties declared"
                          ],
                          "schemaSha256": "a2c799262a3ce3c19ef5cdd983bf3d12b43ab3c426227091b909dcb7054738c0"
                        }
                      ],
                      "transcript": [
                        {
                          "contentType": "application/json",
                          "httpStatus": 200,
                          "latencyMs": 1,
                          "method": "server/discover",
                          "outcome": "result"
                        },
                        {
                          "contentType": "application/json",
                          "httpStatus": 200,
                          "latencyMs": 0,
                          "method": "tools/list",
                          "outcome": "result"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "The target resolves to a non-public address or uses a refused scheme (EGRESS_BLOCKED)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "424": {
            "description": "The remote host did not answer in time or failed: DNS, TLS, timeout (UPSTREAM_UNAVAILABLE)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/a2a/inspect": {
      "get": {
        "operationId": "a2aInspect",
        "tags": [
          "Agents"
        ],
        "summary": "Inspect an A2A agent card",
        "description": "Fetches /.well-known/agent-card.json (legacy agent.json fallback), validates the A2A 1.0 shape, and verifies signatures[] (JWS over the JCS card) with keys from a DID kid or an HTTPS jku.",
        "x-didis-budget": "intensive",
        "externalDocs": {
          "url": "https://did.is/developers#a2a-inspect"
        },
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "Agent origin or card URL.",
            "schema": {
              "type": "string",
              "format": "uri"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A2aInspection",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/A2aInspection"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "The target resolves to a non-public address or uses a refused scheme (EGRESS_BLOCKED)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "No agent card at the URL (NOT_FOUND)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "424": {
            "description": "The remote host did not answer in time or failed: DNS, TLS, timeout (UPSTREAM_UNAVAILABLE)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/agents/verify-delegation": {
      "post": {
        "operationId": "verifyDelegation",
        "tags": [
          "Agents"
        ],
        "summary": "Verify a delegation chain",
        "description": "DID.is Delegation Receipt v1 (experimental): compact JWS receipts, root first. Verifies signatures via capabilityDelegation keys, issuer/audience and prf hash linkage, temporal containment, capability attenuation, acyclicity and depth ≤ 8. register: true stores VALID chains for /v1/agents/verify-tool.",
        "x-didis-budget": "intensive",
        "externalDocs": {
          "url": "https://did.is/developers#verify-delegation"
        },
        "parameters": [],
        "responses": {
          "200": {
            "description": "{ result: DelegationChainResult, registered }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelegationVerification"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "Body over 512 KiB",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "chain": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Receipts, root first."
                  },
                  "trustedRoots": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Acceptable root DIDs."
                  },
                  "register": {
                    "type": "boolean",
                    "description": "Store if VALID."
                  }
                },
                "required": [
                  "chain"
                ]
              },
              "example": {
                "chain": [],
                "trustedRoots": [
                  "did:web:bank.example"
                ]
              }
            }
          }
        }
      }
    },
    "/v1/agents/authorize": {
      "post": {
        "operationId": "authorize",
        "tags": [
          "Agents"
        ],
        "summary": "Authorise a tool call",
        "description": "Stateless: verifies the chain and checks that its leaf capabilities grant the tool (exact name, *, or ns:* for tools named ns:…).",
        "x-didis-budget": "intensive",
        "externalDocs": {
          "url": "https://did.is/developers#authorize"
        },
        "parameters": [],
        "responses": {
          "200": {
            "description": "{ authorization: ToolAuthorization, chain }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthorizationResponse"
                },
                "examples": {
                  "denied": {
                    "summary": "Captured current Rust serializer using synthetic local-only inputs (not a production verdict).",
                    "value": {
                      "authorization": {
                        "agent": "",
                        "authorized": false,
                        "decision": "DENY",
                        "reason": "A chain must contain between 1 and 8 receipts.",
                        "tool": "payments:transfer"
                      },
                      "chain": {
                        "checks": [
                          {
                            "detail": "A chain must contain between 1 and 8 receipts.",
                            "id": "depth",
                            "label": "Chain depth",
                            "status": "FAIL"
                          }
                        ],
                        "effectiveCapabilities": [],
                        "format": "DID.is Delegation Receipt v1 (experimental)",
                        "headline": "A chain must contain between 1 and 8 receipts.",
                        "leaf": null,
                        "limitations": [
                          "Delegation receipts are a DID.is experimental format, not a ratified standard.",
                          "A valid chain proves who delegated what to whom; it does not prove the delegatee behaves within scope."
                        ],
                        "links": [],
                        "notAfter": null,
                        "root": null,
                        "status": "MALFORMED",
                        "trustedRoot": null
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "Body over 512 KiB",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "chain": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Receipts, root first."
                  },
                  "tool": {
                    "type": "string",
                    "description": "Tool name."
                  },
                  "trustedRoots": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Acceptable root DIDs; a chain from any other root is denied."
                  }
                },
                "required": [
                  "chain",
                  "tool"
                ]
              },
              "example": {
                "chain": [],
                "tool": "payments:transfer"
              }
            }
          }
        }
      }
    },
    "/v1/fast-verify/did/{did}": {
      "get": {
        "operationId": "fastVerifyDid",
        "tags": [
          "Fast verify"
        ],
        "summary": "Fast DID verdict",
        "description": "Compact projection for gateways and agents: outcome, headline, dimension states, keys and document hash. Served from cache when fresh.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#fast-verify-did"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "The identifier.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          },
          {
            "name": "noCache",
            "in": "query",
            "required": false,
            "description": "Bypass and refresh the resolver cache.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ did, resolved, outcome, headline, statements, dimensions, keys, domainBinding, documentSha256, observedAt, cached }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FastVerifyDidResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "The target resolves to a non-public address or uses a refused scheme (EGRESS_BLOCKED)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "424": {
            "description": "The remote host did not answer in time or failed: DNS, TLS, timeout (UPSTREAM_UNAVAILABLE)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/fast-verify/jws": {
      "post": {
        "operationId": "fastVerifyJws",
        "tags": [
          "Fast verify"
        ],
        "summary": "Verify a JWS against a DID",
        "description": "Resolves the DID in the JWS kid, requires the key in assertionMethod or authentication (or the relationship you name), and verifies the signature.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#fast-verify-jws"
        },
        "parameters": [],
        "responses": {
          "200": {
            "description": "{ status, valid, headline, signer, relationship, payload }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FastVerifyJwsResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "Body over 512 KiB",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "jws": {
                    "type": "string",
                    "description": "Compact JWS with a DID URL kid."
                  },
                  "relationship": {
                    "type": "string",
                    "description": "Required verification relationship."
                  }
                },
                "required": [
                  "jws"
                ]
              },
              "example": {
                "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2hhWGdCWkR2b3REa0w1MjU3ZmFpenRpR2lDMlF0S0xHcGJubkVHdGEyZG9LI2tleS0xIn0.eyJzdWIiOiJkaWQ6a2V5Ono2TWtoYVhnQlpEdm90RGtMNTI1N2ZhaXp0aUdpQzJRdEtMR3Bibm5FR3RhMmRvSyJ9.c2lnbmF0dXJl"
              }
            }
          }
        }
      }
    },
    "/v1/graph/{did}": {
      "get": {
        "operationId": "graph",
        "tags": [
          "Resolution"
        ],
        "summary": "Evidence graph",
        "description": "The nodes and edges behind a verdict (subject, document, origin, TLS, keys, services, linkage) with the state of every relation. Use it to render or audit why a verdict was reached.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#graph"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "The identifier.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          }
        ],
        "responses": {
          "200": {
            "description": "{ did, observedAt, verdict, nodes, edges }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GraphResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "The target resolves to a non-public address or uses a refused scheme (EGRESS_BLOCKED)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "424": {
            "description": "The remote host did not answer in time or failed: DNS, TLS, timeout (UPSTREAM_UNAVAILABLE)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/claims/{did}": {
      "get": {
        "operationId": "claims",
        "tags": [
          "Directory"
        ],
        "summary": "Verified control claims",
        "description": "Current, unexpired proofs that a controller demonstrated control of this DID (for example a key signature), each stating what it proves and what it does not. A claim is not legal identity.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#claims"
        },
        "parameters": [
          {
            "name": "did",
            "in": "path",
            "required": true,
            "description": "The identifier.",
            "schema": {
              "type": "string"
            },
            "x-didis-encoding": "Raw or fully percent-encoded; decoded exactly once."
          }
        ],
        "responses": {
          "200": {
            "description": "{ did, claims: Claim[], listing, note }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/directory": {
      "get": {
        "operationId": "directory",
        "tags": [
          "Directory"
        ],
        "summary": "Search the directory",
        "description": "Identifiers whose controller proved control and opted in to be listed. Listings cannot be bought. Unknown or repeated parameters are rejected.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#directory"
        },
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Free text, up to 100 characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "method",
            "in": "query",
            "required": false,
            "description": "DID method filter, e.g. web, key, webvh.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1–50 (default 20).",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor from the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ entries: DirectoryEntry[], nextCursor, note }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DirectoryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/agents/verify-tool": {
      "get": {
        "operationId": "verifyTool",
        "tags": [
          "Agents"
        ],
        "summary": "Check a registered agent",
        "description": "Answers ALLOW or DENY for an agent and tool against delegation chains previously registered with verify-delegation (register: true). Without a registered VALID chain the answer is DENY.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#verify-tool"
        },
        "parameters": [
          {
            "name": "agent",
            "in": "query",
            "required": true,
            "description": "The acting agent.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tool",
            "in": "query",
            "required": true,
            "description": "Tool name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "root",
            "in": "query",
            "required": false,
            "description": "Require this delegation root.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ agent, tool, decision, authorized, reason }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolAuthorization"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "operationId": "health",
        "tags": [
          "Service"
        ],
        "summary": "Health and capabilities",
        "description": "Liveness plus the supported DID methods and implemented standard versions. Not rate limited.",
        "x-didis-budget": "none",
        "externalDocs": {
          "url": "https://did.is/developers#health"
        },
        "parameters": [],
        "responses": {
          "200": {
            "description": "{ status, name, version, time, supportedMethods, standards, monitoring, rateLimited }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthStatus"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/status": {
      "get": {
        "operationId": "status",
        "tags": [
          "Service"
        ],
        "summary": "Service status",
        "description": "Machine-readable component status behind did.is/status: resolution, console, billing, monitoring and more.",
        "x-didis-budget": "standard",
        "externalDocs": {
          "url": "https://did.is/developers#status"
        },
        "parameters": [],
        "responses": {
          "200": {
            "description": "{ status, checkedAt, components: Component[] }",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceStatus"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/CapacityExhausted"
          },
          "default": {
            "description": "Any other failure; branch on the stable `code`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "EnrichedResolution": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "didDocument": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DidDocument"
              },
              {
                "type": "null"
              }
            ]
          },
          "didResolutionMetadata": {
            "$ref": "#/components/schemas/ResolutionMetadata"
          },
          "didDocumentMetadata": {
            "type": "object",
            "additionalProperties": true
          },
          "verdict": {
            "$ref": "#/components/schemas/Verdict"
          },
          "dimensions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvidenceDimension"
            }
          },
          "evidence": {
            "$ref": "#/components/schemas/Evidence"
          },
          "graph": {
            "$ref": "#/components/schemas/EvidenceGraph"
          },
          "trace": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TraceStage"
            }
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "resolver": {
            "$ref": "#/components/schemas/ResolverInfo"
          },
          "observedAt": {
            "type": "string"
          },
          "cached": {
            "type": "boolean"
          }
        },
        "required": [
          "did",
          "method",
          "didDocument",
          "didResolutionMetadata",
          "didDocumentMetadata",
          "verdict",
          "dimensions",
          "evidence",
          "graph",
          "trace",
          "limitations",
          "resolver",
          "observedAt",
          "cached"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#EnrichedResolution"
      },
      "ResolutionMetadata": {
        "type": "object",
        "properties": {
          "contentType": {
            "type": "string"
          },
          "error": {
            "description": "RFC 9457 problem object when resolution failed."
          },
          "retrieved": {
            "type": "string"
          },
          "durationMs": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [],
        "x-rust-source": "crates/resolver-core/src/models.rs#ResolutionMetadata"
      },
      "Verdict": {
        "type": "object",
        "properties": {
          "outcome": {
            "type": "string",
            "description": "`RESOLVED` | `RESOLVED_WITH_WARNINGS` | `DEACTIVATED`"
          },
          "headline": {
            "type": "string"
          },
          "statements": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "outcome",
          "headline",
          "statements"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#Verdict"
      },
      "EvidenceDimension": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "description": "`ESTABLISHED` | `SELF_CERTIFYING` | `NOT_ESTABLISHED` | `FAILED` | `INDETERMINATE` | `NOT_APPLICABLE`"
          },
          "statement": {
            "type": "string"
          },
          "proves": {
            "type": "string"
          },
          "doesNotProve": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "label",
          "state",
          "statement",
          "proves",
          "doesNotProve"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#EvidenceDimension"
      },
      "Evidence": {
        "type": "object",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/ResolutionSource"
          },
          "document": {
            "$ref": "#/components/schemas/DocumentEvidence"
          },
          "keys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeyEvidence"
            }
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceEvidence"
            }
          },
          "domainBinding": {
            "$ref": "#/components/schemas/DomainBindingEvidence"
          },
          "linkedAccounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkedAccountEvidence"
            },
            "description": "Reciprocal checks of `alsoKnownAs`; empty when nothing is declared."
          },
          "tls": {
            "$ref": "#/components/schemas/TlsEvidence"
          },
          "history": {
            "$ref": "#/components/schemas/HistoryEvidence"
          }
        },
        "required": [
          "source",
          "document",
          "keys",
          "services"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#Evidence"
      },
      "ResolutionSource": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "`LOCAL_DERIVATION` (did:key, did:jwk) or `HTTPS` (did:web, did:webvh)."
          },
          "url": {
            "type": "string"
          },
          "httpStatus": {
            "type": "integer",
            "minimum": 0
          },
          "contentType": {
            "type": "string"
          },
          "bytes": {
            "type": "integer",
            "minimum": 0
          },
          "sha256": {
            "type": "string",
            "description": "SHA-256 of the exact bytes received (or of the JCS form for derived documents)."
          },
          "peerAddress": {
            "type": "string"
          },
          "redirects": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "latencyMs": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "kind",
          "latencyMs"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#ResolutionSource"
      },
      "DocumentEvidence": {
        "type": "object",
        "properties": {
          "idMatches": {
            "type": "boolean"
          },
          "contexts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContextEvidence"
            }
          },
          "verificationMethodCount": {
            "type": "integer",
            "minimum": 0
          },
          "serviceCount": {
            "type": "integer",
            "minimum": 0
          },
          "relationships": {
            "type": "object",
            "additionalProperties": true
          },
          "alsoKnownAs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "controllers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "jcsSha256": {
            "type": "string",
            "description": "SHA-256 of the RFC 8785 (JCS) canonical form of the document."
          },
          "jcsProfile": {
            "type": "string",
            "description": "Absent on legacy evidence; never infer a corrected profile retroactively."
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "idMatches",
          "contexts",
          "verificationMethodCount",
          "serviceCount",
          "relationships",
          "alsoKnownAs",
          "controllers",
          "warnings"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#DocumentEvidence"
      },
      "ContextEvidence": {
        "type": "object",
        "properties": {
          "uri": {
            "type": "string"
          },
          "known": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "uri",
          "known"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#ContextEvidence"
      },
      "KeyEvidence": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "controller": {
            "type": "string"
          },
          "controllerIsSubject": {
            "type": "boolean"
          },
          "relationships": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "materialProperty": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "`VALID_KEY` | `INVALID_KEY` | `UNSUPPORTED_KEY`"
          },
          "curve": {
            "type": "string"
          },
          "keySizeBits": {
            "type": "integer",
            "minimum": 0
          },
          "jwkThumbprint": {
            "type": "string"
          },
          "multikey": {
            "type": "string"
          },
          "jwk": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "multicodec": {
            "$ref": "#/components/schemas/MulticodecBreakdown"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "type",
          "controllerIsSubject",
          "relationships",
          "status",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#KeyEvidence"
      },
      "MulticodecBreakdown": {
        "type": "object",
        "properties": {
          "multibasePrefix": {
            "type": "string"
          },
          "multibaseEncoding": {
            "type": "string"
          },
          "codec": {
            "type": "string"
          },
          "codecName": {
            "type": "string"
          },
          "varintHex": {
            "type": "string"
          },
          "keyBytesHex": {
            "type": "string"
          },
          "keyLength": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "multibasePrefix",
          "multibaseEncoding",
          "codec",
          "codecName",
          "varintHex",
          "keyBytesHex",
          "keyLength"
        ],
        "x-rust-source": "crates/resolver-core/src/crypto.rs#MulticodecBreakdown"
      },
      "ServiceEvidence": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "endpoint": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "type",
          "endpoint",
          "notes"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#ServiceEvidence"
      },
      "DomainBindingEvidence": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "`VERIFIED` | `NOT_CONFIGURED` | `NOT_LINKED` | `INVALID_PROOF` | `UNSUPPORTED_PROOF` | `UNREACHABLE` | `MALFORMED`"
          },
          "origin": {
            "type": "string"
          },
          "configurationUrl": {
            "type": "string"
          },
          "httpStatus": {
            "type": "integer",
            "minimum": 0
          },
          "configurationSha256": {
            "type": "string"
          },
          "linkedDids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "credentials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkageCredentialEvidence"
            }
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "origin",
          "configurationUrl",
          "linkedDids",
          "credentials",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#DomainBindingEvidence"
      },
      "LinkageCredentialEvidence": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "description": "`JWT` | `DATA_INTEGRITY` | `UNKNOWN`"
          },
          "issuer": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "origin": {
            "type": "string"
          },
          "verificationMethod": {
            "type": "string"
          },
          "proofSuite": {
            "type": "string"
          },
          "issuanceDate": {
            "type": "string"
          },
          "expirationDate": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "`VALID` | `INVALID` | `UNSUPPORTED` | `NOT_FOR_THIS_DID`"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "format",
          "status",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#LinkageCredentialEvidence"
      },
      "LinkedAccountEvidence": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The `alsoKnownAs` value exactly as declared."
          },
          "kind": {
            "type": "string",
            "description": "`WEB_ORIGIN` (a bare https origin) | `WEB_PAGE` (an https URL with a path; only its origin can be confirmed) | `SAME_ORIGIN` (the DID's own origin; see `domainBinding`) | `DID` | `OTHER`"
          },
          "origin": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "`CONFIRMED` (the origin links back, signed by this DID's key) | `NOT_CONFIRMED` | `FAILED` (a link back exists but its proof is invalid) | `UNSUPPORTED` | `UNREACHABLE` | `NOT_CHECKABLE`"
          },
          "configurationStatus": {
            "type": "string",
            "description": "Status of the origin's DID Configuration, when one was fetched."
          },
          "configurationSha256": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "value",
          "kind",
          "status",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#LinkedAccountEvidence"
      },
      "TlsEvidence": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string"
          },
          "validatedBy": {
            "type": "string",
            "description": "What validated the chain and hostname during the handshake."
          },
          "protocol": {
            "type": "string"
          },
          "certificate": {
            "$ref": "#/components/schemas/CertificateSummary"
          },
          "daysUntilExpiry": {
            "type": "integer"
          },
          "hostnameInSan": {
            "type": "boolean"
          }
        },
        "required": [
          "host",
          "validatedBy",
          "protocol"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#TlsEvidence"
      },
      "CertificateSummary": {
        "type": "object",
        "properties": {
          "sha256Fingerprint": {
            "type": "string"
          },
          "subjectCn": {
            "type": "string"
          },
          "subjectO": {
            "type": "string"
          },
          "issuerCn": {
            "type": "string"
          },
          "issuerO": {
            "type": "string"
          },
          "notBefore": {
            "type": "string"
          },
          "notAfter": {
            "type": "string"
          },
          "serialHex": {
            "type": "string"
          },
          "sanDns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "sha256Fingerprint",
          "sanDns"
        ],
        "x-rust-source": "crates/resolver-core/src/x509.rs#CertificateSummary"
      },
      "HistoryEvidence": {
        "type": "object",
        "properties": {
          "scid": {
            "type": "string"
          },
          "logUrl": {
            "type": "string"
          },
          "logSha256": {
            "type": "string"
          },
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LogEntryEvidence"
            }
          },
          "selectedVersionId": {
            "type": "string"
          },
          "preRotation": {
            "type": "boolean"
          },
          "portable": {
            "type": "boolean"
          },
          "deactivated": {
            "type": "boolean"
          },
          "witness": {
            "$ref": "#/components/schemas/WitnessEvidence"
          },
          "ttl": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "scid",
          "logUrl",
          "logSha256",
          "entries",
          "selectedVersionId",
          "preRotation",
          "portable",
          "deactivated"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#HistoryEvidence"
      },
      "LogEntryEvidence": {
        "type": "object",
        "properties": {
          "versionId": {
            "type": "string"
          },
          "versionNumber": {
            "type": "integer",
            "minimum": 0
          },
          "versionTime": {
            "type": "string"
          },
          "entryHash": {
            "type": "string"
          },
          "entryHashValid": {
            "type": "boolean"
          },
          "proofValid": {
            "type": "boolean"
          },
          "signer": {
            "type": "string"
          },
          "updateKeys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "parametersChanged": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "stateSha256": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "versionId",
          "versionNumber",
          "versionTime",
          "entryHash",
          "entryHashValid",
          "proofValid",
          "updateKeys",
          "parametersChanged",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#LogEntryEvidence"
      },
      "WitnessEvidence": {
        "type": "object",
        "properties": {
          "threshold": {
            "type": "integer",
            "minimum": 0
          },
          "witnesses": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "approvals": {
            "type": "integer",
            "minimum": 0
          },
          "satisfied": {
            "type": "boolean"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "threshold",
          "witnesses",
          "approvals",
          "satisfied",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#WitnessEvidence"
      },
      "EvidenceGraph": {
        "type": "object",
        "properties": {
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GraphNode"
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GraphEdge"
            }
          }
        },
        "required": [
          "nodes",
          "edges"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#EvidenceGraph"
      },
      "GraphNode": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "description": "`subject` | `document` | `key` | `service` | `origin` | `tls` | `linkage` | `log` | `controller` | `alias`"
          },
          "label": {
            "type": "string"
          },
          "sublabel": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "layer": {
            "type": "integer",
            "minimum": 0
          },
          "digest": {
            "type": "string"
          },
          "facts": {
            "type": "array",
            "items": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "string"
                },
                {
                  "type": "string"
                }
              ],
              "items": false,
              "minItems": 2,
              "maxItems": 2
            }
          }
        },
        "required": [
          "id",
          "kind",
          "label",
          "state",
          "layer",
          "facts"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#GraphNode"
      },
      "GraphEdge": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "relation": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "description": "`VERIFIED` (checked against relation-specific evidence; not always cryptographic) | `OBSERVED` (fetched/derived) | `DECLARED` (asserted by the document, not verified) | `FAILED`"
          }
        },
        "required": [
          "id",
          "from",
          "to",
          "relation",
          "state"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#GraphEdge"
      },
      "TraceStage": {
        "type": "object",
        "properties": {
          "stage": {
            "type": "string",
            "description": "Machine identifier, e.g. `egress.dns`, `document.parse`, `linkage.verify`."
          },
          "label": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "`PASS` | `FAIL` | `WARN` | `INFO` | `SKIP`"
          },
          "startedUs": {
            "type": "integer",
            "minimum": 0,
            "description": "Offset from the start of the resolution, in microseconds."
          },
          "durationUs": {
            "type": "integer",
            "minimum": 0
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "stage",
          "label",
          "status",
          "startedUs",
          "durationUs",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/trace.rs#TraceStage"
      },
      "ResolverInfo": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "version"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#ResolverInfo"
      },
      "ResolutionResult": {
        "type": "object",
        "properties": {
          "@context": {
            "type": "string"
          },
          "didDocument": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DidDocument"
              },
              {
                "type": "null"
              }
            ]
          },
          "didResolutionMetadata": {
            "$ref": "#/components/schemas/ResolutionMetadata"
          },
          "didDocumentMetadata": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "@context",
          "didDocument",
          "didResolutionMetadata",
          "didDocumentMetadata"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#ResolutionResult"
      },
      "DereferencingResult": {
        "type": "object",
        "properties": {
          "@context": {
            "type": "string"
          },
          "dereferencingMetadata": {
            "$ref": "#/components/schemas/ResolutionMetadata"
          },
          "contentStream": {
            "anyOf": [
              {
                "description": "Arbitrary JSON retained from the source; may be null."
              },
              {
                "type": "null"
              }
            ]
          },
          "contentMetadata": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "@context",
          "dereferencingMetadata",
          "contentStream",
          "contentMetadata"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#DereferencingResult"
      },
      "CredentialVerification": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "`VALID` | `INVALID` | `EXPIRED` | `NOT_YET_VALID` | `REVOKED` | `SUSPENDED` | `UNSUPPORTED` | `INDETERMINATE` | `MALFORMED`"
          },
          "headline": {
            "type": "string"
          },
          "format": {
            "type": "string"
          },
          "dataModel": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "issuer": {
            "type": "string"
          },
          "issuerName": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "validFrom": {
            "type": "string"
          },
          "validUntil": {
            "type": "string"
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Check"
            }
          },
          "proof": {
            "$ref": "#/components/schemas/ProofEvidence"
          },
          "statusList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StatusEvidence"
            }
          },
          "issuerResolution": {
            "$ref": "#/components/schemas/IssuerEvidence"
          },
          "issuerTrust": {
            "$ref": "#/components/schemas/IssuerTrust",
            "description": "SD-JWT VC only: categorical issuer-trust evidence (never a score)."
          },
          "sdJwt": {
            "$ref": "#/components/schemas/SdJwtEvidence",
            "description": "SD-JWT VC only: disclosure and key-binding evidence (no claim values)."
          },
          "claims": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "requirements": {
            "$ref": "#/components/schemas/RequirementsOutcome",
            "description": "Present only when the request carried `requiredClaims`."
          },
          "credential": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "valid": {
            "type": "boolean",
            "description": "Legacy convenience fields (`valid == (status == \"VALID\")`)."
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "status",
          "headline",
          "format",
          "dataModel",
          "types",
          "checks",
          "statusList",
          "claims",
          "credential",
          "limitations",
          "valid",
          "errors"
        ],
        "x-rust-source": "crates/resolver-core/src/vc.rs#CredentialVerification"
      },
      "Check": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "`PASS` | `FAIL` | `WARN` | `SKIP` | `UNSUPPORTED` | `INDETERMINATE`"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "label",
          "status",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/models.rs#Check"
      },
      "ProofEvidence": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string"
          },
          "suite": {
            "type": "string"
          },
          "verificationMethod": {
            "type": "string"
          },
          "proofPurpose": {
            "type": "string"
          },
          "created": {
            "type": "string"
          },
          "keyCurve": {
            "type": "string"
          },
          "signedDigest": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "format",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/vc.rs#ProofEvidence"
      },
      "StatusEvidence": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "statusType": {
            "type": "string"
          },
          "purpose": {
            "type": "string"
          },
          "index": {
            "type": "integer",
            "minimum": 0
          },
          "listUrl": {
            "type": "string"
          },
          "statusSize": {
            "type": "integer",
            "minimum": 0
          },
          "listCredentialVerified": {
            "type": "boolean"
          },
          "listLengthBits": {
            "type": "integer",
            "minimum": 0
          },
          "value": {
            "type": "integer",
            "minimum": 0
          },
          "result": {
            "type": "string",
            "description": "`ACTIVE` | `SET` | `INDETERMINATE` | `UNSUPPORTED`"
          },
          "window": {
            "type": "string"
          },
          "windowOffset": {
            "type": "integer",
            "minimum": 0
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "statusType",
          "purpose",
          "statusSize",
          "result",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/vc.rs#StatusEvidence"
      },
      "IssuerEvidence": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "outcome": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "domainBinding": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/vc.rs#IssuerEvidence"
      },
      "IssuerTrust": {
        "type": "object",
        "properties": {
          "anchor": {
            "type": "string",
            "description": "`DID` | `X509_CERTIFICATE` | `ISSUER_METADATA` | `NONE`"
          },
          "result": {
            "type": "string",
            "description": "`NOT_APPLICABLE` | `NOT_ESTABLISHED` | `CALLER_ANCHORED` | `CHAIN_INVALID`"
          },
          "trustedListChecked": {
            "type": "boolean",
            "description": "Always `false`: DID.is does not ingest EU trusted lists (ETSI TS 119 602/612)."
          },
          "chain": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CertificateRef"
            }
          },
          "metadataUrl": {
            "type": "string"
          },
          "proves": {
            "type": "string"
          },
          "doesNotProve": {
            "type": "string"
          }
        },
        "required": [
          "anchor",
          "result",
          "trustedListChecked",
          "proves",
          "doesNotProve"
        ],
        "x-rust-source": "crates/resolver-core/src/sdjwt.rs#IssuerTrust"
      },
      "CertificateRef": {
        "type": "object",
        "properties": {
          "sha256": {
            "type": "string"
          },
          "subjectCn": {
            "type": "string"
          },
          "issuerCn": {
            "type": "string"
          },
          "notAfter": {
            "type": "string"
          }
        },
        "required": [
          "sha256"
        ],
        "x-rust-source": "crates/resolver-core/src/sdjwt.rs#CertificateRef"
      },
      "SdJwtEvidence": {
        "type": "object",
        "properties": {
          "sdAlg": {
            "type": "string"
          },
          "disclosures": {
            "type": "integer",
            "minimum": 0
          },
          "decoyDigests": {
            "type": "integer",
            "minimum": 0
          },
          "registeredClaims": {
            "description": "Registered issuer claims only: iss, vct, iat, nbf, exp, status, cnf (thumbprint)."
          },
          "keyBinding": {
            "type": "string",
            "description": "`VERIFIED` | `ABSENT` | `INVALID` | `UNSUPPORTED` | `INDETERMINATE`"
          }
        },
        "required": [
          "sdAlg",
          "disclosures",
          "decoyDigests",
          "registeredClaims",
          "keyBinding"
        ],
        "x-rust-source": "crates/resolver-core/src/sdjwt.rs#SdJwtEvidence"
      },
      "RequirementsOutcome": {
        "type": "object",
        "properties": {
          "met": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RequirementResult"
            }
          }
        },
        "required": [
          "met",
          "results"
        ],
        "x-rust-source": "crates/resolver-core/src/vc.rs#RequirementsOutcome"
      },
      "RequirementResult": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "result": {
            "type": "string",
            "description": "`SATISFIED` | `NOT_SATISFIED` | `NOT_DISCLOSED` | `NOT_EVALUATED`"
          }
        },
        "required": [
          "path",
          "result"
        ],
        "x-rust-source": "crates/resolver-core/src/vc.rs#RequirementResult"
      },
      "McpInspection": {
        "type": "object",
        "properties": {
          "endpoint": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "`INSPECTED` | `AUTH_REQUIRED`"
          },
          "mode": {
            "type": "string",
            "description": "`STATELESS` (2026-07-28) | `SESSION` (legacy)"
          },
          "negotiatedVersion": {
            "type": "string"
          },
          "supportedVersions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "serverInfo": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "capabilities": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "instructions": {
            "type": "string"
          },
          "tools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolEvidence"
            }
          },
          "inventoryHash": {
            "type": "string"
          },
          "jcsProfile": {
            "type": "string"
          },
          "classCounts": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "minimum": 0
            }
          },
          "drift": {
            "$ref": "#/components/schemas/DriftEvidence"
          },
          "auth": {
            "$ref": "#/components/schemas/AuthEvidence"
          },
          "transcript": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranscriptEntry"
            }
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Check"
            }
          },
          "headline": {
            "type": "string"
          },
          "tls": {
            "$ref": "#/components/schemas/TlsEvidence"
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "endpoint",
          "status",
          "mode",
          "supportedVersions",
          "serverInfo",
          "capabilities",
          "tools",
          "inventoryHash",
          "classCounts",
          "drift",
          "transcript",
          "checks",
          "headline",
          "limitations"
        ],
        "x-rust-source": "crates/resolver-core/src/mcp.rs#McpInspection"
      },
      "ToolEvidence": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "definitionSha256": {
            "type": "string"
          },
          "schemaSha256": {
            "type": "string"
          },
          "parameters": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "annotations": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "declaredClass": {
            "type": "string",
            "description": "Class derived from the server's own annotations, if any."
          },
          "heuristicClass": {
            "type": "string",
            "description": "DID.is heuristic class: `read_only` | `write` | `network_egress` | `system_execution`."
          },
          "riskSignals": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "drift": {
            "type": "string",
            "description": "`ADDED` | `CHANGED` | `UNCHANGED` | `FIRST_OBSERVATION`"
          },
          "inputSchema": {
            "description": "Arbitrary JSON retained from the source; may be null."
          }
        },
        "required": [
          "name",
          "description",
          "definitionSha256",
          "schemaSha256",
          "parameters",
          "annotations",
          "heuristicClass",
          "riskSignals",
          "drift",
          "inputSchema"
        ],
        "x-rust-source": "crates/resolver-core/src/mcp.rs#ToolEvidence"
      },
      "DriftEvidence": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "`FIRST_OBSERVATION` | `PROFILE_CHANGED` | `UNCHANGED` | `CHANGED`"
          },
          "previousObservedAt": {
            "type": "string"
          },
          "previousInventoryHash": {
            "type": "string"
          },
          "added": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "removed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "changed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "status",
          "added",
          "removed",
          "changed"
        ],
        "x-rust-source": "crates/resolver-core/src/mcp.rs#DriftEvidence"
      },
      "AuthEvidence": {
        "type": "object",
        "properties": {
          "required": {
            "type": "boolean"
          },
          "wwwAuthenticate": {
            "type": "string"
          },
          "resourceMetadata": {
            "type": "string"
          }
        },
        "required": [
          "required"
        ],
        "x-rust-source": "crates/resolver-core/src/mcp.rs#AuthEvidence"
      },
      "TranscriptEntry": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string"
          },
          "httpStatus": {
            "type": "integer",
            "minimum": 0
          },
          "contentType": {
            "type": "string"
          },
          "latencyMs": {
            "type": "integer",
            "minimum": 0
          },
          "outcome": {
            "type": "string"
          }
        },
        "required": [
          "method",
          "latencyMs",
          "outcome"
        ],
        "x-rust-source": "crates/resolver-core/src/mcp.rs#TranscriptEntry"
      },
      "A2aInspection": {
        "type": "object",
        "properties": {
          "cardUrl": {
            "type": "string"
          },
          "httpStatus": {
            "type": "integer",
            "minimum": 0
          },
          "cardSha256": {
            "type": "string"
          },
          "canonicalSha256": {
            "type": "string"
          },
          "jcsProfile": {
            "type": "string"
          },
          "specVersion": {
            "type": "string",
            "description": "`1.0` | `0.3` | `unknown`"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "provider": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "documentationUrl": {
            "type": "string"
          },
          "interfaces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InterfaceEvidence"
            }
          },
          "capabilities": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "securitySchemes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecuritySchemeEvidence"
            }
          },
          "skills": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SkillEvidence"
            }
          },
          "signatures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardSignatureEvidence"
            }
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Check"
            }
          },
          "headline": {
            "type": "string"
          },
          "card": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "tls": {
            "$ref": "#/components/schemas/TlsEvidence"
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "cardUrl",
          "httpStatus",
          "cardSha256",
          "canonicalSha256",
          "specVersion",
          "name",
          "description",
          "interfaces",
          "capabilities",
          "securitySchemes",
          "skills",
          "signatures",
          "checks",
          "headline",
          "card",
          "limitations"
        ],
        "x-rust-source": "crates/resolver-core/src/a2a.rs#A2aInspection"
      },
      "InterfaceEvidence": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "protocolBinding": {
            "type": "string"
          },
          "protocolVersion": {
            "type": "string"
          },
          "https": {
            "type": "boolean"
          },
          "sameOrigin": {
            "type": "boolean"
          }
        },
        "required": [
          "url",
          "protocolBinding",
          "https",
          "sameOrigin"
        ],
        "x-rust-source": "crates/resolver-core/src/a2a.rs#InterfaceEvidence"
      },
      "SecuritySchemeEvidence": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "kind",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/a2a.rs#SecuritySchemeEvidence"
      },
      "SkillEvidence": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "examples": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "tags",
          "examples"
        ],
        "x-rust-source": "crates/resolver-core/src/a2a.rs#SkillEvidence"
      },
      "CardSignatureEvidence": {
        "type": "object",
        "properties": {
          "alg": {
            "type": "string"
          },
          "kid": {
            "type": "string"
          },
          "jku": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "`VALID` | `INVALID` | `UNSUPPORTED` | `INDETERMINATE`"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/a2a.rs#CardSignatureEvidence"
      },
      "DelegationChainResult": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "`VALID` | `INVALID` | `INDETERMINATE` | `MALFORMED`"
          },
          "headline": {
            "type": "string"
          },
          "format": {
            "type": "string"
          },
          "root": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "leaf": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "effectiveCapabilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notAfter": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "trustedRoot": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DelegationLink"
            }
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Check"
            }
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "status",
          "headline",
          "format",
          "root",
          "leaf",
          "effectiveCapabilities",
          "notAfter",
          "trustedRoot",
          "links",
          "checks",
          "limitations"
        ],
        "x-rust-source": "crates/resolver-core/src/delegation.rs#DelegationChainResult"
      },
      "DelegationLink": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "minimum": 0
          },
          "issuer": {
            "type": "string"
          },
          "audience": {
            "type": "string"
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notBefore": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "expires": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "jti": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "kid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "alg": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "digest": {
            "type": "string"
          },
          "signatureValid": {
            "type": "boolean"
          },
          "status": {
            "type": "string",
            "description": "`VALID` | `INVALID` | `INDETERMINATE` | `MALFORMED`"
          },
          "issuerHeadline": {
            "type": "string"
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Check"
            }
          }
        },
        "required": [
          "index",
          "issuer",
          "audience",
          "capabilities",
          "notBefore",
          "expires",
          "jti",
          "kid",
          "alg",
          "digest",
          "signatureValid",
          "status",
          "checks"
        ],
        "x-rust-source": "crates/resolver-core/src/delegation.rs#DelegationLink"
      },
      "ToolAuthorization": {
        "type": "object",
        "properties": {
          "agent": {
            "type": "string"
          },
          "tool": {
            "type": "string"
          },
          "decision": {
            "type": "string",
            "description": "`ALLOW` | `DENY`"
          },
          "authorized": {
            "type": "boolean"
          },
          "reason": {
            "type": "string"
          },
          "matchedCapability": {
            "type": "string"
          },
          "root": {
            "type": "string"
          },
          "expires": {
            "type": "string"
          }
        },
        "required": [
          "agent",
          "tool",
          "decision",
          "authorized",
          "reason"
        ],
        "x-rust-source": "crates/resolver-core/src/delegation.rs#ToolAuthorization"
      },
      "PolicyEvaluationResult": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "policyName": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "PASS",
              "FAIL",
              "INDETERMINATE",
              "NOT_APPLICABLE"
            ]
          },
          "headline": {
            "type": "string"
          },
          "rulesEvaluated": {
            "type": "integer",
            "minimum": 0
          },
          "rulesPassed": {
            "type": "integer",
            "minimum": 0
          },
          "evaluations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RuleEvaluation"
            }
          },
          "evaluatedAt": {
            "type": "string"
          }
        },
        "required": [
          "did",
          "status",
          "headline",
          "rulesEvaluated",
          "rulesPassed",
          "evaluations",
          "evaluatedAt"
        ],
        "x-rust-source": "crates/resolver-core/src/policy.rs#PolicyEvaluationResult"
      },
      "RuleEvaluation": {
        "type": "object",
        "properties": {
          "rule": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "PASS",
              "FAIL",
              "INDETERMINATE",
              "NOT_APPLICABLE"
            ]
          },
          "message": {
            "type": "string"
          },
          "expected": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "observedValue": {
            "description": "Arbitrary JSON retained from the source; may be null."
          }
        },
        "required": [
          "rule",
          "status",
          "message"
        ],
        "x-rust-source": "crates/resolver-core/src/policy.rs#RuleEvaluation"
      },
      "PolicyDefinition": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "rules": {
            "$ref": "#/components/schemas/PolicyRules"
          }
        },
        "required": [
          "rules"
        ],
        "x-rust-source": "crates/resolver-core/src/policy.rs#PolicyDefinition",
        "additionalProperties": false
      },
      "PolicyRules": {
        "type": "object",
        "properties": {
          "didResolution": {
            "type": "string",
            "description": "`\"required\"` — the DID must resolve and not be deactivated."
          },
          "allowedMethods": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "e.g. `[\"web\", \"webvh\"]`"
          },
          "allowedCurves": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "e.g. `[\"Ed25519\", \"P-256\"]` — applies to valid signing keys."
          },
          "allowedKeySuites": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Verification method types, e.g. `[\"Multikey\", \"JsonWebKey2020\"]`."
          },
          "minKeyBits": {
            "type": "integer",
            "minimum": 0
          },
          "requireKeyRelationship": {
            "type": "string",
            "description": "A valid key must be authorised for this relationship (e.g. `assertionMethod`)."
          },
          "domainBinding": {
            "type": "string",
            "description": "`\"required\"` | `\"optional\"` — DIF Well-Known DID Configuration."
          },
          "tlsMinDaysRemaining": {
            "type": "integer"
          },
          "linkedAccounts": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "https origins (e.g. `[\"https://shop.example\"]`) that must be declared in `alsoKnownAs` *and* confirm the DID back with a DID Configuration signed by its key. At most [`MAX_POLICY_LINKED_ACCOUNTS`]."
          },
          "verifiableHistory": {
            "type": "string",
            "description": "`\"required\"` — a cryptographically verifiable history (did:webvh)."
          },
          "maxCacheAgeSeconds": {
            "type": "integer"
          },
          "credentialStatus": {
            "type": "string",
            "description": "`\"active\"` — the supplied credential must verify with clear status."
          },
          "credentialIssuerMustBeSubject": {
            "type": "boolean",
            "description": "Requires supported verified proof and DID-bound issuer attribution matching the evaluated DID. Validity dates and active status are separate requirements."
          }
        },
        "required": [],
        "x-rust-source": "crates/resolver-core/src/policy.rs#PolicyRules",
        "additionalProperties": false
      },
      "SemanticDiff": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "fromHash": {
            "type": "string"
          },
          "toHash": {
            "type": "string"
          },
          "fromObservation": {
            "type": "string"
          },
          "toObservation": {
            "type": "string"
          },
          "fromObservedAt": {
            "type": "string"
          },
          "toObservedAt": {
            "type": "string"
          },
          "identical": {
            "type": "boolean"
          },
          "keysAdded": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "keysRemoved": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "keysRotated": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "relationshipsChanged": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelationshipChange"
            }
          },
          "servicesAdded": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "servicesRemoved": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "servicesChanged": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "controllerChanged": {
            "type": "boolean"
          },
          "alsoKnownAsChanged": {
            "type": "boolean"
          },
          "contextsChanged": {
            "type": "boolean"
          },
          "domainBindingFrom": {
            "type": "string"
          },
          "domainBindingTo": {
            "type": "string"
          },
          "domainBindingChanged": {
            "type": "boolean"
          },
          "changedMembers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "fromDocument": {
            "description": "Arbitrary JSON retained from the source; may be null."
          },
          "toDocument": {
            "description": "Arbitrary JSON retained from the source; may be null."
          }
        },
        "required": [
          "did",
          "fromHash",
          "toHash",
          "fromObservedAt",
          "toObservedAt",
          "identical",
          "keysAdded",
          "keysRemoved",
          "keysRotated",
          "relationshipsChanged",
          "servicesAdded",
          "servicesRemoved",
          "servicesChanged",
          "controllerChanged",
          "alsoKnownAsChanged",
          "contextsChanged",
          "domainBindingFrom",
          "domainBindingTo",
          "domainBindingChanged",
          "changedMembers",
          "summary",
          "fromDocument",
          "toDocument"
        ],
        "x-rust-source": "crates/resolver-core/src/storage.rs#SemanticDiff"
      },
      "RelationshipChange": {
        "type": "object",
        "properties": {
          "relationship": {
            "type": "string"
          },
          "added": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "removed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "relationship",
          "added",
          "removed"
        ],
        "x-rust-source": "crates/resolver-core/src/storage.rs#RelationshipChange"
      },
      "ObservationRecord": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "did": {
            "type": "string"
          },
          "documentHash": {
            "type": "string"
          },
          "observedAt": {
            "type": "string"
          },
          "lastSeenAt": {
            "type": "string"
          },
          "seenCount": {
            "type": "integer"
          },
          "latencyMs": {
            "type": "integer",
            "minimum": 0
          },
          "resolverVersion": {
            "type": "string"
          },
          "domainBindingStatus": {
            "type": "string"
          },
          "summary": {
            "description": "Arbitrary JSON retained from the source; may be null."
          }
        },
        "required": [
          "id",
          "did",
          "documentHash",
          "observedAt",
          "lastSeenAt",
          "seenCount",
          "latencyMs",
          "resolverVersion",
          "domainBindingStatus",
          "summary"
        ],
        "x-rust-source": "crates/resolver-core/src/storage.rs#ObservationRecord"
      },
      "DirectoryEntry": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "listedAt": {
            "type": "integer"
          },
          "claims": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProvenMethod"
            }
          },
          "matchedOn": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Why this entry is in the result: `name` and/or `did` when a query matched them. Empty when no query was given (plain browsing)."
          }
        },
        "required": [
          "did",
          "method",
          "displayName",
          "description",
          "listedAt",
          "claims",
          "matchedOn"
        ],
        "x-rust-source": "crates/resolver-core/src/directory.rs#DirectoryEntry"
      },
      "ProvenMethod": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string"
          },
          "verifiedAt": {
            "type": "integer"
          }
        },
        "required": [
          "method",
          "verifiedAt"
        ],
        "x-rust-source": "crates/resolver-core/src/directory.rs#ProvenMethod"
      },
      "PublicListing": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "listedAt": {
            "type": "integer"
          }
        },
        "required": [
          "displayName",
          "description",
          "listedAt"
        ],
        "x-rust-source": "crates/resolver-core/src/directory.rs#PublicListing"
      },
      "PublicClaim": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string"
          },
          "verifiedAt": {
            "type": "integer"
          },
          "validUntil": {
            "type": "integer"
          },
          "proves": {
            "type": "string"
          },
          "doesNotProve": {
            "type": "string"
          }
        },
        "required": [
          "method",
          "verifiedAt",
          "validUntil",
          "proves",
          "doesNotProve"
        ],
        "x-rust-source": "crates/resolver-core/src/claims.rs#PublicClaim"
      },
      "ServiceStatus": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "operational",
              "degraded",
              "down"
            ]
          },
          "checkedAt": {
            "type": "integer"
          },
          "components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Component"
            }
          }
        },
        "required": [
          "status",
          "checkedAt",
          "components"
        ],
        "x-rust-source": "crates/resolver-core/src/status.rs#ServiceStatus"
      },
      "Component": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "operational",
              "degraded",
              "down"
            ]
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "status",
          "detail"
        ],
        "x-rust-source": "crates/resolver-core/src/status.rs#Component"
      },
      "HistoryResponse": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObservationRecord"
            }
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "did",
          "count",
          "history",
          "note"
        ]
      },
      "GraphResponse": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "observedAt": {
            "type": "string"
          },
          "verdict": {
            "$ref": "#/components/schemas/Verdict"
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GraphNode"
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GraphEdge"
            }
          }
        },
        "required": [
          "did",
          "observedAt",
          "verdict",
          "nodes",
          "edges"
        ]
      },
      "ClaimsResponse": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "claims": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicClaim"
            }
          },
          "listing": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PublicListing"
              },
              {
                "type": "null"
              }
            ]
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "did",
          "claims",
          "listing",
          "note"
        ]
      },
      "DirectoryResponse": {
        "type": "object",
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DirectoryEntry"
            }
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "entries",
          "nextCursor",
          "note"
        ]
      },
      "DelegationVerification": {
        "type": "object",
        "properties": {
          "result": {
            "$ref": "#/components/schemas/DelegationChainResult"
          },
          "registered": {
            "type": "boolean"
          }
        },
        "required": [
          "result",
          "registered"
        ]
      },
      "AuthorizationResponse": {
        "type": "object",
        "properties": {
          "authorization": {
            "$ref": "#/components/schemas/ToolAuthorization"
          },
          "chain": {
            "$ref": "#/components/schemas/DelegationChainResult"
          }
        },
        "required": [
          "authorization",
          "chain"
        ]
      },
      "PolicyResponse": {
        "type": "object",
        "properties": {
          "evaluation": {
            "$ref": "#/components/schemas/PolicyEvaluationResult"
          },
          "credential": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CredentialVerification"
              },
              {
                "type": "null"
              }
            ]
          },
          "resolution": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "verdict",
                  "dimensions"
                ],
                "properties": {
                  "verdict": {
                    "$ref": "#/components/schemas/Verdict"
                  },
                  "dimensions": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/EvidenceDimension"
                    }
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "evaluation",
          "credential",
          "resolution"
        ]
      },
      "FastVerifyDidResult": {
        "type": "object",
        "properties": {
          "did": {
            "type": "string"
          },
          "resolved": {
            "type": "boolean"
          },
          "outcome": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "statements": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "dimensions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "state"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "state": {
                  "type": "string"
                }
              }
            }
          },
          "keys": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "curve",
                "status",
                "relationships",
                "jwkThumbprint"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "curve": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "status": {
                  "type": "string"
                },
                "relationships": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "jwkThumbprint": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "domainBinding": {
            "type": [
              "string",
              "null"
            ]
          },
          "documentSha256": {
            "type": [
              "string",
              "null"
            ]
          },
          "observedAt": {
            "type": "string"
          },
          "cached": {
            "type": "boolean"
          }
        },
        "required": [
          "did",
          "resolved",
          "outcome",
          "headline",
          "statements",
          "dimensions",
          "keys",
          "domainBinding",
          "documentSha256",
          "observedAt",
          "cached"
        ]
      },
      "FastVerifyJwsResult": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "VALID",
              "INVALID",
              "INDETERMINATE",
              "UNSUPPORTED",
              "MALFORMED"
            ]
          },
          "valid": {
            "type": "boolean"
          },
          "headline": {
            "type": "string"
          },
          "alg": {
            "type": [
              "string",
              "null"
            ]
          },
          "kid": {
            "type": [
              "string",
              "null"
            ]
          },
          "typ": {
            "type": [
              "string",
              "null"
            ]
          },
          "payload": {},
          "signingInputSha256": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "relationship": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "valid",
          "headline"
        ]
      },
      "HealthStatus": {
        "type": "object",
        "properties": {
          "status": {
            "const": "ok"
          },
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "time": {
            "type": "string"
          },
          "supportedMethods": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "standards": {
            "type": "object",
            "required": [
              "didResolution",
              "didWebvh",
              "dataIntegrity",
              "jose",
              "statusList",
              "domainLinkage",
              "mcp",
              "a2a"
            ],
            "properties": {
              "didResolution": {
                "type": "string"
              },
              "didWebvh": {
                "type": "string"
              },
              "dataIntegrity": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "jose": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "statusList": {
                "type": "string"
              },
              "domainLinkage": {
                "type": "string"
              },
              "mcp": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "a2a": {
                "type": "string"
              }
            }
          },
          "monitoring": {
            "type": "boolean"
          },
          "rateLimited": {
            "type": "boolean"
          }
        },
        "required": [
          "status",
          "name",
          "version",
          "time",
          "supportedMethods",
          "standards",
          "monitoring",
          "rateLimited"
        ]
      },
      "DidDocument": {
        "type": "object",
        "description": "DID document; method-specific and JSON-LD extension members are preserved.",
        "properties": {
          "id": {
            "type": "string"
          },
          "@context": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object"
                    }
                  ]
                }
              }
            ]
          },
          "verificationMethod": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "service": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "additionalProperties": true
      },
      "ClaimRequirement": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "pattern": "^/"
          },
          "equals": {
            "type": [
              "boolean",
              "integer",
              "string"
            ]
          }
        },
        "required": [
          "path",
          "equals"
        ],
        "additionalProperties": false
      },
      "CredentialVerifyRequest": {
        "type": "object",
        "properties": {
          "credential": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "type": "string"
              }
            ]
          },
          "expectedAudience": {
            "type": "string",
            "minLength": 1
          },
          "expectedNonce": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          },
          "trustedIssuerCertificates": {
            "type": "array",
            "maxItems": 8,
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "requiredClaims": {
            "type": "array",
            "minItems": 1,
            "maxItems": 16,
            "items": {
              "$ref": "#/components/schemas/ClaimRequirement"
            }
          }
        },
        "required": [
          "credential"
        ]
      },
      "W3cProblem": {
        "type": "object",
        "required": [
          "type",
          "title",
          "detail"
        ],
        "description": "ResolutionMetadata.error uses ResolverError.problem(): no native HTTP code/status extension.",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        }
      },
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. W3C resolution errors use https://www.w3.org/ns/did# types; DID.is errors use https://did.is/problems#.",
        "required": [
          "type",
          "title",
          "status",
          "code"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "code": {
            "type": "string",
            "enum": [
              "INVALID_DID",
              "INVALID_DID_URL",
              "INVALID_OPTIONS",
              "INVALID_REQUEST",
              "EGRESS_BLOCKED",
              "NOT_FOUND",
              "METHOD_NOT_ALLOWED",
              "REPRESENTATION_NOT_SUPPORTED",
              "PAYLOAD_TOO_LARGE",
              "INVALID_DID_DOCUMENT",
              "UPSTREAM_UNAVAILABLE",
              "RATE_LIMITED",
              "INTERNAL_ERROR",
              "METHOD_NOT_SUPPORTED",
              "FEATURE_NOT_SUPPORTED",
              "CAPACITY_EXHAUSTED",
              "SERVICE_UNAVAILABLE"
            ]
          },
          "detail": {
            "type": "string"
          },
          "trace": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TraceStage"
            },
            "description": "Per-stage telemetry when available."
          }
        }
      }
    },
    "headers": {
      "RetryAfter": {
        "description": "Seconds to wait before retrying.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "responses": {
      "RateLimited": {
        "description": "Budget exhausted (RATE_LIMITED).",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "CapacityExhausted": {
        "description": "Bounded work capacity momentarily full (CAPACITY_EXHAUSTED); retry with backoff.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      }
    }
  },
  "x-didis-problem-codes": {
    "400": [
      "INVALID_DID",
      "INVALID_DID_URL",
      "INVALID_OPTIONS",
      "INVALID_REQUEST"
    ],
    "403": [
      "EGRESS_BLOCKED"
    ],
    "404": [
      "NOT_FOUND"
    ],
    "405": [
      "METHOD_NOT_ALLOWED"
    ],
    "406": [
      "REPRESENTATION_NOT_SUPPORTED"
    ],
    "413": [
      "PAYLOAD_TOO_LARGE"
    ],
    "422": [
      "INVALID_DID_DOCUMENT"
    ],
    "424": [
      "UPSTREAM_UNAVAILABLE"
    ],
    "429": [
      "RATE_LIMITED"
    ],
    "500": [
      "INTERNAL_ERROR"
    ],
    "501": [
      "METHOD_NOT_SUPPORTED",
      "FEATURE_NOT_SUPPORTED"
    ],
    "503": [
      "CAPACITY_EXHAUSTED",
      "SERVICE_UNAVAILABLE"
    ]
  }
}