Skip to main content
This walkthrough uses test:fixture-execute, a generic, credential-free capability built for local testing, evaluated against a policy named vendor-payment. That policy name is unrelated to any connector, it’s just the example policy this transaction runs against. See Quickstart for the same flow driven from the repository directly rather than an installed package; this page installs @parmana/sdk as a real dependency the way you would in your own project.

Prerequisites

  • Node.js installed (node --version)
  • A running Parmana Runtime to talk to: either your own deployment, or the local in-memory server this walkthrough starts from a clone of this repository
1

Start a local Runtime

From a clone of this repository:
Generate a local Gateway signing keypair (the Execution Gateway signs its own attestations with a keypair separate from the authorization-verification key):
Start the server fully locally, no external database:
Confirm it’s up:
With NODE_ENV=test, a generic, credential-free test connector (test-fixture) registers automatically, no connector credentials required for this walkthrough. Every other route, including /version, fails closed with a 401 until you send the demo bearer key the committed .env ships for local development, raw key my-secret-api-key:
See Deploy patterns for running against something other than the in-memory local server.
2

Install the SDK

In a separate project (or a new terminal, same repo):
Real, published package. npm view @parmana/sdk version confirms the current version directly from npm.
3

Build and execute a Business Transaction

Create quickstart.ts:
Run it:
4

Real output

Captured from an actual run against a local server, using the same createBusinessTransaction() call this page documents (see typescript/examples/06-create-business-transaction.ts in this repository for the exact source, and typescript/test/integration/examples.integration.test.ts for the test that proves it stays runnable):
The full ExecutionTrustRecord also includes executions[0].decision (outcome: "APPROVED"), executions[0].evidence (what the connector actually did), and the signature block covered in Verify independently. Field names are camelCase here; the same record from the Python SDK uses snake_case for the same fields (see Python SDK Quickstart).

Troubleshooting

NetworkError: connect ECONNREFUSED: the Runtime isn’t running, or you’re pointed at the wrong endpoint. Confirm step 1’s curl http://localhost:3000/health succeeds first. AuthenticationError on every call: either you omitted apiKey against a server that doesn’t have PARMANA_AUTH_DISABLED=true set, or the key is wrong. The demo key above, my-secret-api-key, only works against a server started exactly as shown in step 1. ExecutionRejectedError: Execution rejected: ...: the policy evaluated your signals and declined. The message names which rule failed; check Write your first policy for how vendor-payment@2.0.0 reads its signals, or loosen the signals in your own test transaction to see it pass. A 400 about a mismatched id: you built the BusinessTransaction object by hand instead of through createBusinessTransaction(). See createBusinessTransaction(), no more hand-synced ids for exactly which three id pairs the server cross-checks.

Next

TypeScript SDK Overview

The concepts behind what you just ran: transactions, decisions, proofs.

TypeScript SDK for AI Agents

Wire this exact call into LangChain.js, the Vercel AI SDK, or a server endpoint.

End-to-end: agent → Parmana → Paytm

The same flow against a real connector and real infrastructure, not the local test fixture.

Verify independently

Read back or re-verify the ExecutionTrustRecord you just created.

TypeScript SDK reference

The full error taxonomy, model types, and test suite.