Skip to content
Tenzro
Documentation menu
Build and operate

API reference

JSON-RPC methods grouped by access class, the OpenAI-compatible HTTP routes and the Web API served by every Tenzro node.

A Tenzro node serves four surfaces. This page covers the first three; MCP and A2A have their own pages.

SurfacePublic endpointNode default
JSON-RPC 2.0, REST gateway and OpenAI-compatible routeshttps://rpc.tenzro.com127.0.0.1:8545
Web API: health, status, verification, discoveryhttps://api.tenzro.com127.0.0.1:8080
MCP (Streamable HTTP, OAuth 2.1 + DPoP)https://mcp.tenzro.com/mcp127.0.0.1:3001
A2A (JSON-RPC and SSE, Agent Card at /.well-known/agent-card.json)https://a2a.tenzro.com127.0.0.1:3002

See MCP server and A2A protocol.

Every method the node serves, with its access class, params, result, errors and an example request, is in the JSON-RPC reference, generated from the node's source for each release. The MCP tools are in MCP.md.

JSON-RPC

Send a JSON-RPC 2.0 request as POST / on the RPC endpoint. Parameters can be positional or named. Hex values are 0x-prefixed and amounts are in wei.

bash
curl -s https://rpc.tenzro.com \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tenzro_getBlock","params":["latest"]}'

The node is closed by default. Every method it serves is classified, and a method that is not classified is refused before dispatch. The authoritative list, with each method's access class, comes from the node itself:

bash
curl -s https://rpc.tenzro.com \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tenzro_listRpcMethods","params":[{"contains":"validator"}]}'

The same methods are reachable over REST: GET /rpc lists them and POST /rpc/{method} calls one with a JSON body of named parameters. REST calls go through exactly the same access checks. How each class authenticates is in RPC access.

Open

No credentials. Reads of public state, discovery and verification.

AreaMethods
Chaintenzro_blockNumber, tenzro_getBlock, tenzro_getBlockRange, tenzro_getFinalizedBlock, tenzro_getTransaction, tenzro_getTransactionHistory
Accountstenzro_getBalance, tenzro_getNonce, tenzro_getTokenBalance, tenzro_totalSupply, tenzro_getSupplyMetrics
Validatorstenzro_listValidators, tenzro_listActiveValidators, tenzro_getValidatorState
Verificationtenzro_verifyTeeAttestation, tenzro_verifyZkProof, tenzro_verifyDidEnvelope, tenzro_slaGetParams
Paymentstenzro_listPaymentProtocols, tenzro_paymentGatewayInfo, tenzro_listX402Schemes, tenzro_x402VerifyOffer
Discoverytenzro_listRpcMethods

EVM-compatible reads are open too: eth_chainId, eth_blockNumber, eth_getBalance, eth_getTransactionCount, eth_getBlockByNumber, eth_getBlockByHash, eth_getTransactionReceipt, eth_call, eth_estimateGas, eth_getCode, eth_getStorageAt, eth_getLogs, eth_gasPrice, eth_maxPriorityFeePerGas, eth_feeHistory, eth_syncing, net_version, net_peerCount, web3_clientVersion.

Operators of a private node may close open methods to callers their access policy does not admit; see RPC access.

Owner

These move money or change state that belongs to someone. Each needs proof from the account that owns or pays: a signed transaction, a DID envelope that names the method and binds its parameters, or a DPoP-bound session. A signature from anyone else, including the node operator, is refused.

AreaMethodsProof
Transactionstenzro_sendRawTransaction, eth_sendRawTransactionComposite hybrid signature in the transaction; for a passkey account, the passkey's WebAuthn assertion as its P-256 leg
Keys and recoverytenzro_sendRawTransaction carrying a KeystoreUpdate (link or unlink a passkey, policy, recovery signers, recovery)Approvals by the account's passkeys inside the update, or its recovery signers' for a recovery
Paymentstenzro_payX402, tenzro_payMpp, tenzro_openPaymentChannel, tenzro_closePaymentChannel, tenzro_setSettlementPreferencePayer's signature; the payee's for a settlement preference

An action a delegated agent may only take with its root's approval runs as tenzro_agentAct carrying the root's step-up signature; see Agents.

Admin

Operator only. These change the policy of the node you are calling and need a DPoP-bound access token of the node's operator DID or an administrator its access policy names. They never change network-wide state; that goes through governance.

AreaMethods
Stake and keystenzro_validatorSelfStake, tenzro_validatorPublicKeys
Devicestenzro_bindDevice, tenzro_revokeBoundDevice, tenzro_transferMachineOwnership
Nodetenzro_exportConfig, tenzro_produceSnapshot, tenzro_gossipStats

OpenAI-compatible routes

Served on the RPC endpoint. Generation routes are paid: sign in to a node that serves you on account, or pay per request when the route answers 402 Payment Required (x402 or MPP). See OpenAI-compatible APIs.

RoutePurpose
POST /v1/chat/completionsChat, streaming with "stream": true
POST /v1/responsesResponses API
POST /v1/embeddingsText embeddings
POST /v1/images/generations, POST /v1/images/editsImage generation and editing
POST /v1/audio/transcriptions, POST /v1/audio/speechSpeech to text and text to speech
POST /v1/videosVideo generation job
POST /v1/tenzro/forecasts, /v1/tenzro/detections, /v1/tenzro/segmentations, /v1/tenzro/video/embeddingsTenzro extensions for time series and vision

Open, no payment:

RoutePurpose
GET /v1/models, GET /v1/models/{id}Models this node can serve
GET /v1/generationUsage and cost of a finished generation
GET /v1/videos/{id}, GET /v1/videos/{id}/contentStatus and bytes of a paid video job
GET /healthLiveness

Tenant routes: /v1/files (upload, list, get, content, delete). Each file belongs to the DID the caller's access token proves, or to the payer of the x402 payment for the upload.

Web API

Served on https://api.tenzro.com. Liveness routes are never gated, so orchestrators and load balancers can always reach them.

RouteReturns
GET /health{ status, version, verification_service }
GET /ready{ ready, block_height, network_tip, block_lag, peer_count, reason }
GET /status{ node_state, roles, health, block_height, peer_count, uptime_secs, ready, status_message }
bash
curl -s https://api.tenzro.com/status

Also on the Web API:

RoutePurpose
POST /verify/transaction, /verify/settlement, /verify/inference, /verify/zk-proof, /verify/did-envelopeStateless verification
GET /.well-known/did.jsonThe node's DID document
GET /.well-known/jwks.json, GET /.well-known/http-message-signatures-directoryPublic keys for HTTP message signature verification
GET /1.0/identifiers/{did}DID resolution in Universal Resolver format
POST /oauth/token, /oauth/introspect, /oauth/revokeOAuth 2.1 token endpoints
GET /discovery/resourcesResources this node offers
GET /metricsPrometheus metrics

Errors

CodeMeaning
-32601Method not found, or not served by this node
-32602Invalid parameters
-32001A required owner proof is missing or does not verify
-32003Transaction signature invalid
-32004Refused by the node's access policy: sign in, or sign in as an administrator

HTTP 401 means a gate refused the request, and 402 means the route needs payment.