Skip to main content
Both SDKs cover the same operations. TypeScript exposes each as a method on 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.6.0 need SDK 1.6.0, published on 2026-10-11, rows marked 1.5.0 need 1.5.0 or later, rows marked 1.4.0 need 1.4.0 or later, and rows marked 1.3.0 need 1.3.0 or later, both on 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

Approvers

External connectors

Sign the step up authorization for approve or reject with signPolicyChangeStepUp() or sign_policy_change_step_up(), with the changeId as pendingPolicyChangeId. With an SDK older than 1.5.0, call these routes directly; see Connect any external system.

Business signal sources

With an SDK older than 1.6.0, call these routes directly; see Connect a business signal source.

Authority grants

With an SDK older than 1.6.0, call these routes directly; see Grant an agent authority.

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. Every error, from the server or raised by the SDK itself, extends ParmanaError. The ones raised without a server response are ConfigurationError (bad client configuration), NetworkError and TimeoutError (the request did not complete; in Python TimeoutError is a subclass of NetworkError, in TypeScript both extend ParmanaError directly), and VerificationError and ReplayError (the result failed a check or could not be replayed).

Parity rules both SDKs keep

  • The same core methods on the client itself: execute, verify, replay, validatePolicy (validate_policy in Python) and health, in addition to the grouped APIs (client.policies, client.executionIntents and so on).
  • The same error class names as listed above, so one catch clause means the same thing in both languages.

How this is kept true

  • scripts/check-sdk-docs.ts fails 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.ts and python/tests/test_sdk_alignment.py check 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.