@observer-protocol/sdk, @observerprotocol/sdk and the PyPI package
observer-protocol were all last released on 30 April 2026 and are no longer
maintained. The npm packages are marked deprecated. They have not been unpublished, so anything
already pinned to them keeps working — but do not start with them.
There is no single client library today. What exists is a verification core and one adapter per rail, and that is the honest shape of it:
| If you want to… | Use |
|---|---|
| Verify a credential someone gave you | @observer-protocol/policy-engine |
| Enforce policy on x402 | @observer-protocol/x402-op-authorize |
| Enforce policy on L402 / Lightning | @observer-protocol/l402-op-authorize |
| Enforce policy on Tether WDK | @observer-protocol/wdk-op-policy |
| Enforce policy on MPP / Tempo | @observer-protocol/mppx-op-account |
| Verify an Open Wallet Standard delegation | @observer-protocol/ows-op-verify |
No API key, no token, no Observer Protocol API in the path. It fetches the issuer's DID document and the revocation status list over ordinary HTTPS from the origins the credential names; point offline.didDocumentPath at a local copy and it makes no network call at all.
It checks the issuer, the structure, the validity window, the eddsa-jcs-2022 proof
against the issuer's DID document, and revocation. It fails closed.
Note that verifyCredential(config, nowMs) is a different exported function and does
not take the credential. The published type definitions are the reference — a worked
example does not ship yet, which is a gap we know about.
The DID document is public and the schema URLs are frozen and immutable, so verification needs no
permission from us: nothing to authenticate to, and nothing we can withhold to make a credential
stop verifying. It is not independent of reachability, though.
onUnreachable: 'cache-then-deny' is the only implemented mode, so a revocation list
that cannot be fetched is served from cache inside the staleness window and denied
outside it — and Observer's own clause-zero status list is served by
api.observerprotocol.org rather than as a static file. It fails closed, and it will
refuse us too.
A hosted one-call verifier is also available at
verify.observerprotocol.org
— POST /v1/verify, open and unauthenticated, rate limited. It returns a
verdict signed with did:web:observerprotocol.org#key-7, so its answer is checkable
against the same DID document as everything else.
The offline path above stays the primary instruction. It needs nothing from us
at the moment of verification and cannot be rate limited, revoked or taken down. The hosted
endpoint is a convenience for getting an answer in one call, not a dependency.