
Developers
One API. Every call settled and signed.
Call open models on independent operators through OpenAI-compatible routes. Pay per request over HTTP 402 or with an access token. Give your agents spending limits they cannot exceed, and keep a payment record and a signed receipt for every call they make.
Quick start
Your first request in three steps.
- 01
Create your account
tenzro wallet create-localshows the account your machine’s TPM or Secure Enclave keys. There is no seed phrase; fund the account by transferring TNZO to its address.tenzro access sign-in --rpc <node>signs this account in to a node and stores its access token. - 02
Pick a model
List the models the network serves, or browse the registry.
curl http://127.0.0.1:8545/v1/models - 03
Call it
Send an OpenAI-compatible request. Sign in with an access token where a node’s policy names you, or pay per request over HTTP 402 with x402 or MPP.
curl
curl http://127.0.0.1:8545/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: DPoP $TENZRO_BEARER_JWT" -H "DPoP: $TENZRO_DPOP_PROOF" \
-d '{
"model": "qwen3-14b",
"messages": [{ "role": "user", "content": "Hello from Tenzro" }]
}'Existing OpenAI clients
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "http://127.0.0.1:8545/v1",
apiKey: "unused",
// Signed in to a node whose access policy names you: the access token
// and a fresh DPoP proof on every request.
fetch: async (url, init) => {
const headers = new Headers(init?.headers);
headers.set("Authorization", `DPoP ${access.token}`);
headers.set("DPoP", await access.prover.proof(init?.method ?? "GET", String(url), access.token));
return fetch(url, { ...init, headers });
},
});Tenzro CLI
Wallets, identities, agents, models, payments, sponsorship and node management from the terminal. Included in every node archive above.DocsTypeScript SDK
Typed client for the network: identity, wallets, inference, payments, agents and the ledger.DocsRust SDK
Async Rust client with the same surface as the TypeScript SDK.DocsPython SDK
Sync and async Python client for every RPC the node serves, with hardware signing through tenzro-device-key.DocsAPIs
JSON-RPC (EVM-compatible plus the tenzro_ namespace), a REST web API, and OpenAI-compatible inference endpoints.DocsMCP
Every node serves MCP (revision 2026-07-28) over Streamable HTTP: give any MCP client that speaks that revision access to the network.DocsA2A
Agent-to-agent protocol endpoint, with signed agent cards for discovery.Docs
TypeScript
import { TenzroClient } from "tenzro-sdk";
const client = new TenzroClient({ endpoint: "http://127.0.0.1:8545" });
const height = await client.getBlockNumber();
console.log("Block height", height);Endpoints
Every node serves the same surfaces.
Every node serves the same surfaces on its own address: JSON-RPC and the OpenAI-compatible /v1 routes on its RPC port, the web API, MCP at /mcp and A2A with signed agent cards.
Learn
Guides for what you are building.
Documentation
Concepts, guides and reference for every part of the network.Learn moreTutorials
Step-by-step builds, from a first connection to a validator or a model provider.Learn moreModel registry
Every model the network serves, with modalities and providers.Learn moreWhitepapers
Protocol design in depth.Learn more

Build
Build with the SDK.
TypeScript, Rust and Python clients for the same OpenAI-compatible APIs, identity and payments.
