ParmanaClient. Python exposes each area as an attribute of the client, such as client.policy or client.receipt, and adds a shortcut method on the client for most of them. Both forms are listed.
Version. Rows marked 1.3.0 need SDK 1.3.0, published on 2026-09-25 to
npm (
npm install @parmana/sdk) and PyPI (pip install parmana). Every other
row works in 1.2.0.Executing and deciding
Evidence and verification
The offline verifiers make no network call. Get the public key once with
publicKey() or public_key() and keep it. In Python they need pip install "parmana[verify]", and from 1.3.0 they accept either the raw JSON or the SDK’s own model.
Execution Intents
Policies and governance
Caller and service
Operations with no SDK method, and why
Errors
Both SDKs raise a typed error for every non 2xx response. From 1.3.0 both carry the HTTP status:error.statusCode in TypeScript, error.status_code in Python (Python has had it since before 1.3.0). The server’s own code, for example CONNECTOR_NOT_REGISTERED or SIGNING_UNAVAILABLE, is on serverCode / server_code of InternalServerError and of AuthorizationError when present.
How this is kept true
scripts/check-sdk-docs.tsfails the build when a page names a method, option or export that does not exist in the SDK.- Unit tests in
typescript/test/Alignment.test.tsandpython/tests/test_sdk_alignment.pycheck the method, path and body of every operation added in 1.3.0. - Both SDKs verify the same real server signed Execution Intent offline. A step up authorization signed by each SDK is accepted by the server’s own verifier.
- On 2026-09-25 both SDKs were run against a live self hosted deployment: caller, public key, propose, list, sign and approve a policy change, a reused signature refused, a refused request with its Refusal Record verified, an authorized request with no connector (
503,CONNECTOR_NOT_REGISTERED), its Execution Intent verified offline, and Trust Record listing. 11 of 11 checks in each SDK.