Skip to content
Tenzro
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.

  1. 01

    Create your account

    tenzro wallet create-local shows 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.

  2. 02

    Pick a model

    List the models the network serves, or browse the registry.

    curl http://127.0.0.1:8545/v1/models
  3. 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 });
  },
});
Developer tools

SDKs, APIs, MCP servers and the CLI.

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.

A grid of dark cubes with a single line of light threading through it.
Build

Build with the SDK.

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

ExploreJoin the network