API Reference
Tenzro provides 270+ JSON-RPC methods across 28 namespaces plus a Web Verification API for cryptographic verification.
Endpoints:
- JSON-RPC:
127.0.0.1:8545(local) /https://rpc.tenzro.network(testnet) - Web API:
0.0.0.0:8080(local) /https://api.tenzro.network(testnet) - MCP Server:
0.0.0.0:3001/mcp/https://mcp.tenzro.network/mcp - A2A Protocol:
0.0.0.0:3002/https://a2a.tenzro.network
Ethereum-Compatible Methods
Standard Ethereum JSON-RPC methods for EVM compatibility. Wallets like MetaMask can connect using these endpoints.
| Method | Description |
|---|---|
eth_blockNumber | Returns the current block number |
eth_getBalance | Returns balance of an account (params: address, block) |
eth_getTransactionCount | Returns account nonce (params: address, block) |
eth_sendRawTransaction | Submits a signed transaction (params: signed tx hex) |
eth_getBlockByNumber | Returns block by number (params: number, full txs bool) |
eth_getBlockByHash | Returns block by hash (params: hash, full txs bool) |
eth_chainId | Returns the chain ID (default: 1337) |
eth_getTransactionReceipt | Returns transaction receipt (params: tx hash) |
eth_gasPrice | Returns the current effective gas price in wei (base fee + suggested priority tip). Tracks the EIP-1559 fee market — value adjusts ±12.5% per block based on parent gas usage vs. the 15M target. |
eth_maxPriorityFeePerGas | Returns a suggested EIP-1559 priority fee (tip) in wei. Read this to fill the maxPriorityFeePerGas field of a Type-2 transaction. Independent of base fee, which clients should derive from eth_feeHistory or the parent block's baseFeePerGas. |
eth_feeHistory | Returns base-fee history and gas-usage ratios for the last N blocks (params: blockCount, newestBlock, rewardPercentiles). Result includes baseFeePerGas[] (one entry per block + one for the next), gasUsedRatio[], and reward[] percentiles for tip estimation. Used by wallets to model maxFeePerGas and maxPriorityFeePerGas. |
eth_estimateGas | Estimates gas for a transaction (params: tx object) |
eth_getCode | Returns contract bytecode (params: address, block) |
eth_getStorageAt | Returns storage value (params: address, slot, block) |
eth_call | Executes a call without creating a transaction (params: tx object, block) |
eth_getLogs | Returns logs matching a filter (params: filter object) |
eth_getBlockTransactionCountByNumber | Returns tx count in a block by number |
eth_getBlockTransactionCountByHash | Returns tx count in a block by hash |
eth_getTransactionByBlockNumberAndIndex | Returns tx by block number and index |
eth_syncing | Returns false when caught up to the network tip, or { startingBlock, currentBlock, highestBlock } when lagging. highestBlock is an estimate from peer StatusMessage gossip — clients can drive a catch-up loop via tenzro_getBlockRange. |
eth_blockNumber
Returns the current block number.
{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}{
"jsonrpc": "2.0",
"result": "0x4b7",
"id": 1
}eth_getBalance
Returns the TNZO balance of an account in wei.
address— Account address (hex)block— Block number or "latest"
{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5", "latest"],
"id": 1
}{
"jsonrpc": "2.0",
"result": "0x0234c8a3397aab58",
"id": 1
}eth_sendRawTransaction
Submits a hybrid post-quantum signed transaction to the network. The node canonicalises the transaction hash over Transaction::hash() — which includes the server-supplied timestamp and the wallet's ML-DSA-65 (FIPS 204) public key — and synchronously verifies BOTH the Ed25519 leg and the ML-DSA-65 leg before acceptance. Missing or invalid signatures on either leg return JSON-RPC error -32003. For typical usage prefer tenzro_signAndSendTransaction (atomic server-side hybrid sign + send) — see below.
tx— Transaction object with from, to, value, plus the full hybrid signature payload: signature, public_key, pq_signature (ML-DSA-65, 3309 bytes), pq_public_key (ML-DSA-65, 1952 bytes), and timestamp
{
"jsonrpc": "2.0",
"method": "eth_sendRawTransaction",
"params": [{
"from": "0x...",
"to": "0x...",
"value": "0x...",
"signature": "0x...",
"public_key": "0x...",
"pq_signature": "0x...",
"pq_public_key": "0x...",
"timestamp": 1712700000
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": "0x1234567890abcdef...",
"id": 1
}tenzro_signMessage
Signs an arbitrary message with the node-held wallet bound to the ambient DPoP-bearer JWT. Returns the classical Ed25519 signature + public key alongside the post-quantum ML-DSA-65 signature + public key.
message— Hex-encoded message bytes
{
"jsonrpc": "2.0",
"method": "tenzro_signMessage",
"params": [{ "message": "0xdeadbeef" }],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"signature": "0x...",
"public_key": "0x...",
"pq_signature": "0x...",
"pq_public_key": "0x..."
},
"id": 1
}tenzro_signTransaction
Offline hybrid-signing helper. Auth is mandatory — the caller must present 'Authorization: DPoP <jwt>' + 'DPoP: <proof>' headers, and the auth engine resolves the controller DID to a wallet ID. The node assembles the canonical Transaction (binding the wallet's ML-DSA-65 public key into the hash preimage), stamps the timestamp, computes Transaction::hash(), signs both the Ed25519 leg and the ML-DSA-65 leg, and returns the full signed envelope. The caller can resubmit unchanged via eth_sendRawTransaction. Private keys never travel over the wire.
from— Sender addressto— Recipient addressvalue— Amount (decimal or hex wei)nonce— Account noncechain_id— Chain ID (default 1337)tx_type— Optional typed payload (Transfer, CreateEscrow, ReleaseEscrow, RefundEscrow, ...) — defaults to Transfer { amount: value }
{
"jsonrpc": "2.0",
"method": "tenzro_signTransaction",
"params": [{
"from": "0x...",
"to": "0x...",
"value": 1000000000000000000,
"nonce": 0,
"chain_id": 1337
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"signature": "0x...",
"public_key": "0x...",
"pq_signature": "0x...",
"pq_public_key": "0x...",
"timestamp": 1712700000,
"tx_hash": "0x..."
},
"id": 1
}tenzro_signAndSendTransaction
Atomic server-side hybrid sign + send (recommended path). Auth is mandatory — the caller presents 'Authorization: DPoP <jwt>' + 'DPoP: <proof>' headers and the auth engine resolves the controller DID to a wallet ID. The node assembles the Transaction (binding the wallet's ML-DSA-65 public key into the hash preimage), stamps the timestamp, computes Transaction::hash(), signs both the Ed25519 leg and the ML-DSA-65 leg, verifies both, and submits to the mempool — all in one call. Returns the transaction hash on success, JSON-RPC error -32003 if either signature fails to verify. Private keys never travel over the wire.
from— Sender addressto— Recipient addressvalue— Amount (decimal or hex wei)nonce— Account noncechain_id— Chain ID (default 1337)tx_type— Optional typed payload (Transfer, CreateEscrow, ReleaseEscrow, RefundEscrow, ...) — defaults to Transfer { amount: value }
{
"jsonrpc": "2.0",
"method": "tenzro_signAndSendTransaction",
"params": [{
"from": "0x...",
"to": "0x...",
"value": 1000000000000000000,
"nonce": 0,
"chain_id": 1337
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": "0x1234567890abcdef...",
"id": 1
}eth_getTransactionReceipt
Returns the receipt of a transaction by transaction hash.
hash— Transaction hash
{
"jsonrpc": "2.0",
"result": {
"transactionHash": "0x1234567890abcdef...",
"blockNumber": "0x4b7",
"gasUsed": "0x5208",
"status": "0x1"
},
"id": 1
}Web3 & Network Methods
| Method | Description |
|---|---|
web3_clientVersion | Returns the Tenzro node client version string |
web3_sha3 | Returns Keccak-256 hash of given data (params: data hex) |
net_version | Returns the current network ID |
net_peerCount | Returns number of connected peers |
net_listening | Returns true if the node is listening for connections |
Tenzro Blockchain Methods
Block & Transaction
tenzro_blockNumber
Returns the current block height.
{
"jsonrpc": "2.0",
"result": { "block_height": 1207 },
"id": 1
}tenzro_getBlock
Returns a block by height with full transaction details. The base_fee_per_gas field carries the EIP-1559 base fee in wei for the block; null for blocks produced before the fee market was active.
height— Block height number
{
"jsonrpc": "2.0",
"result": {
"height": 1207,
"hash": "0xabc123...",
"parent_hash": "0xdef456...",
"timestamp": 1712700000,
"transactions": [...],
"state_root": "0x789...",
"gas_used": "0x5208",
"gas_limit": "0x1c9c380",
"base_fee_per_gas": "0x3b9aca00"
},
"id": 1
}tenzro_getBlockRange
Returns a contiguous range of blocks for catch-up sync. Lets a lagging validator pull batches of historical blocks above its local tip in one round-trip. endHeight is clamped to min(endHeight, startHeight + maxResults - 1, local_tip). maxResults defaults to 64, capped at 256. Missing heights from pruning are skipped silently — drive pagination with nextHeight, and continue while moreAvailable is true (independent of the requested endHeight).
startHeight— First block height to return (inclusive)endHeight— Last block height to return (inclusive, clamped)maxResults— Optional batch size (default 64, max 256)
{
"jsonrpc": "2.0",
"result": {
"blocks": [{ "height": 1000, "hash": "0x...", "transactions": [...] }, ...],
"nextHeight": 1064,
"moreAvailable": true,
"localTip": 1207
},
"id": 1
}tenzro_getTransaction
Returns a transaction by hash.
hash— Transaction hash (hex)
{
"jsonrpc": "2.0",
"result": {
"hash": "0xabc123...",
"from": "0x742d35Cc...",
"to": "0x8Ba1f109...",
"value": "100000000000000000000",
"nonce": 42,
"status": "confirmed"
},
"id": 1
}tenzro_sendTransaction
Constructs and sends a transaction (alternative to eth_sendRawTransaction).
from— Sender addressto— Recipient addressvalue— Amount in weidata— Optional calldata (hex)
{
"jsonrpc": "2.0",
"result": { "transaction_hash": "0xabc123..." },
"id": 1
}tenzro_submitBlock
Submit a new block for validation (validator nodes only).
block— Block data object
{
"jsonrpc": "2.0",
"result": { "accepted": true, "height": 1208 },
"id": 1
}tenzro_getFinalizedBlock
Returns the latest finalized block height.
{
"jsonrpc": "2.0",
"result": { "finalized_height": 1200 },
"id": 1
}tenzro_getTransactionHistory
Returns transaction history for an address.
address— Account addresslimit— Max results (optional, default 50)
{
"jsonrpc": "2.0",
"result": {
"transactions": [
{ "hash": "0xabc...", "type": "transfer", "value": "100.0", "status": "confirmed" }
]
},
"id": 1
}Accounts & Wallets
tenzro_createAccount
Creates a new account with an MPC threshold wallet.
threshold— Threshold (e.g., 2 for 2-of-3)total_shares— Total shares (e.g., 3)
{
"jsonrpc": "2.0",
"result": {
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5",
"threshold": 2,
"total_shares": 3
},
"id": 1
}tenzro_createWallet
Creates a new keypair wallet (Ed25519 or Secp256k1).
key_type— "ed25519" or "secp256k1"
{
"jsonrpc": "2.0",
"result": {
"address": "0x8Ba1f109551bD432803012645Ac136ddd64DBA72",
"key_type": "ed25519"
},
"id": 1
}tenzro_getBalance
Returns TNZO balance for an address.
address— Account address (hex)
{
"jsonrpc": "2.0",
"result": { "balance": "1000.0", "address": "0x742d35Cc..." },
"id": 1
}tenzro_getNonce
Returns the current nonce for an address.
address— Account address
{
"jsonrpc": "2.0",
"result": { "nonce": 42 },
"id": 1
}tenzro_listAccounts
Lists all accounts managed by this node.
{
"jsonrpc": "2.0",
"result": [
{ "address": "0x742d35Cc...", "balance": "1000.0" },
{ "address": "0x8Ba1f109...", "balance": "500.0" }
],
"id": 1
}Token Methods
tenzro_tokenBalance
Returns token balance for an address.
address— Account addresstoken_id— Token identifier (optional, defaults to TNZO)
{
"jsonrpc": "2.0",
"result": { "balance": "1000.0", "token": "TNZO" },
"id": 1
}tenzro_totalSupply
Returns total TNZO token supply.
{
"jsonrpc": "2.0",
"result": { "total_supply": "1000000000.0" },
"id": 1
}tenzro_faucet
Request testnet TNZO tokens (100 TNZO per request, 24h cooldown).
address— Recipient address
{
"jsonrpc": "2.0",
"result": { "amount": "100.0", "transaction_hash": "0xabc..." },
"id": 1
}OAuth 2.1 / AAP Delegation Methods
Every Tenzro node is an embedded OAuth 2.1 Authorization Server. JWTs are DPoP-bound (RFC 9449), carry typed RAR grants (RFC 9396), and layer the IETF AAP profile (aap_agent, aap_task, aap_capabilities, aap_oversight, aap_delegation, aap_context, aap_audit) on top for agent provenance and EU AI Act Article 50 disclosures.
tenzro_onboardHuman
Register a human DID and mint a long-lived DPoP-bound JWT in one call. The caller publishes the Ed25519 holder public key; the AS computes the JWK thumbprint and binds the token via cnf.jkt.
display_name— Display name for the identityholder_pubkey— Hex-encoded Ed25519 holder public key (DPoP key)rar— Array of RAR grants (RFC 9396 authorization_details)aap_capabilities— Array of AAP capability strings (e.g., ['inference', 'transfer'])
{
"jsonrpc": "2.0",
"result": {
"did": "did:tenzro:human:550e8400-...",
"wallet_address": "0x742d35Cc...",
"access_token": "<DPoP-bound JWT>",
"expires_in": 86400,
"token_type": "DPoP"
},
"id": 1
}tenzro_onboardDelegatedAgent
Register a machine DID controlled by a human and mint a JWT with an explicit RAR/AAP delegation scope. The token's controller_did is set to the human's DID.
controller_did— DID of the human controllerholder_pubkey— Hex-encoded Ed25519 holder public keycapabilities— Array of capability stringsrar— RAR grants (subset of controller's grants)aap_capabilities— AAP capability subset
tenzro_onboardAutonomousAgent
Register an autonomous agent (no human controller) and mint a JWT. RAR/AAP scope must be explicit — there is no parent token to inherit from.
display_name— Display name for the agentholder_pubkey— Hex-encoded Ed25519 holder public keycapabilities— Array of capability stringsrar— RAR grantsaap_capabilities— AAP capability list
tenzro_exchangeToken
RFC 8693 Token Exchange. A parent token holder mints a child JWT with a strict subset of RAR grants and AAP capabilities. The child's controller_did is set to the parent sub; the chain is recorded in aap_delegation for audit.
subject_token— Parent JWT to derive fromchild_bearer_did— DID that will hold the child tokenchild_dpop_jkt— DPoP key thumbprint (JWK SHA-256) for the child holderrequested_rar— Subset of parent RAR grants the child should receiverequested_aap_capabilities— Subset of parent AAP capabilitiesrequested_ttl_secs— Requested lifetime (clamped to AS max_ttl_secs)
{
"jsonrpc": "2.0",
"method": "tenzro_exchangeToken",
"params": [{
"subject_token": "<parent JWT>",
"child_bearer_did": "did:tenzro:machine:6ba7b810-...",
"child_dpop_jkt": "<child DPoP JWK thumbprint>",
"requested_rar": [
{ "type": "tenzro.transfer", "max_amount": "10.0", "asset": "TNZO" }
],
"requested_aap_capabilities": ["inference"],
"requested_ttl_secs": 3600
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"access_token": "<child JWT>",
"expires_in": 3600,
"token_type": "DPoP",
"issued_token_type": "urn:ietf:params:oauth:token-type:jwt",
"delegation": {
"controller_did": "did:tenzro:human:550e8400-...",
"delegation_chain": ["did:tenzro:human:550e8400-...", "did:tenzro:machine:6ba7b810-..."]
}
},
"id": 1
}tenzro_introspectToken
RFC 7662 Token Introspection. Resource servers and audit tools verify a token. Per RFC 7662 §2.2, expired/revoked/unknown tokens return only {active: false} — no metadata leaks. Active tokens return the full claim set including DPoP cnf.jkt, RAR authorization_details, and AAP claims.
token— JWT to introspect
{
"jsonrpc": "2.0",
"result": {
"active": true,
"iss": "https://api.tenzro.network",
"sub": "did:tenzro:human:550e8400-...",
"aud": "https://api.tenzro.network",
"exp": 1747900000,
"iat": 1747800000,
"cnf": { "jkt": "<DPoP JWK thumbprint>" },
"authorization_details": [
{ "type": "tenzro.transfer", "max_amount": "100.0", "asset": "TNZO" }
],
"aap_capabilities": ["inference", "transfer"],
"aap_delegation": ["did:tenzro:human:550e8400-..."]
},
"id": 1
}tenzro_oauthDiscovery
RFC 8414 Authorization Server metadata. Returns the same document served at /.well-known/openid-configuration. Clients use this to discover the token, introspection, and revocation endpoints, supported grant types, and the full list of AAP claims this AS issues.
{
"jsonrpc": "2.0",
"result": {
"issuer": "https://api.tenzro.network",
"token_endpoint": "https://api.tenzro.network/oauth/token",
"introspection_endpoint": "https://api.tenzro.network/oauth/introspect",
"revocation_endpoint": "https://api.tenzro.network/oauth/revoke",
"grant_types_supported": [
"urn:ietf:params:oauth:grant-type:token-exchange",
"refresh_token"
],
"token_endpoint_auth_methods_supported": ["none"],
"dpop_signing_alg_values_supported": ["EdDSA"],
"authorization_details_types_supported": [
"tenzro.transfer", "tenzro.create_escrow", "tenzro.discharge_escrow",
"tenzro.inference", "tenzro.stake", "tenzro.vote",
"tenzro.contract", "tenzro.register_identity"
],
"aap_claims_supported": [
"aap_agent", "aap_task", "aap_capabilities",
"aap_oversight", "aap_delegation", "aap_context", "aap_audit"
]
},
"id": 1
}tenzro_refreshToken
Refresh an existing JWT. The new token preserves the cnf.jkt binding, RAR grants, and AAP claims; only iat/exp are advanced.
refresh_token— Refresh token issued alongside the access token
tenzro_revokeToken
RFC 7009 Token Revocation. Revokes a token and cascades to all child tokens minted from it via Token Exchange.
token— JWT to revoke
{
"jsonrpc": "2.0",
"result": { "revoked": true, "cascaded_count": 2 },
"id": 1
}Onboarding Methods
tenzro_participate
One-click onboarding: provisions a TDIP identity, MPC wallet, and hardware profile.
display_name— Display name for the identity
{
"jsonrpc": "2.0",
"method": "tenzro_participate",
"params": [{ "display_name": "Alice" }],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"identity": {
"did": "did:tenzro:human:550e8400-e29b-41d4-a716-446655440000",
"display_name": "Alice",
"identity_type": "human",
"status": "active"
},
"wallet": {
"wallet_id": "w-a1b2c3d4",
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5",
"threshold": "2-of-3",
"key_type": "Ed25519"
},
"hardware": {
"cpu_model": "Apple M2 Pro",
"cpu_cores": 12,
"total_ram_gb": 32.0,
"gpus": []
}
},
"id": 1
}tenzro_importIdentity
Import an existing private key to create a TDIP identity and MPC wallet.
private_key— Hex-encoded private key (with or without 0x prefix)key_type— "ed25519" or "secp256k1"display_name— Display name for the identitypassword— Password for encrypting wallet key shares
{
"jsonrpc": "2.0",
"result": {
"identity": {
"did": "did:tenzro:human:661f9500-f30c-52e5-b827-557766551111",
"display_name": "Alice",
"status": "active"
},
"wallet": {
"wallet_id": "w-e5f6g7h8",
"address": "0x8Ba1f109551bD432803012645Ac136ddd64DBA72",
"threshold": "2-of-3",
"key_type": "Ed25519"
}
},
"id": 1
}tenzro_joinAsMicroNode
Join the network as a lightweight micro node with minimal resource requirements.
display_name— Display name for the identity
{
"jsonrpc": "2.0",
"result": {
"did": "did:tenzro:human:...",
"role": "light_client",
"status": "joined"
},
"id": 1
}Identity Methods (TDIP)
tenzro_registerIdentity
Register a new TDIP identity (human).
identity_type— "human"display_name— Display name
{
"jsonrpc": "2.0",
"result": {
"did": "did:tenzro:human:550e8400-e29b-41d4-a716-446655440000",
"wallet_address": "0x742d35Cc..."
},
"id": 1
}tenzro_registerMachineIdentity
Register a machine/agent identity with a controller DID.
controller_did— Controller DID (human or autonomous)capabilities— Array of capability stringsdelegation_scope— Optional delegation scope object
{
"jsonrpc": "2.0",
"result": {
"did": "did:tenzro:machine:controller123:agent-uuid",
"controller": "did:tenzro:human:...",
"status": "active"
},
"id": 1
}tenzro_resolveIdentity
Resolve a DID to its identity record.
did— DID to resolve (e.g., "did:tenzro:human:...")
{
"jsonrpc": "2.0",
"result": {
"did": "did:tenzro:human:550e8400-...",
"display_name": "Alice",
"identity_type": "human",
"kyc_tier": "Unverified",
"status": "active",
"wallet_address": "0x742d35Cc..."
},
"id": 1
}tenzro_resolveDidDocument
Returns a W3C-compliant DID Document for a given DID.
did— DID to resolve
{
"jsonrpc": "2.0",
"result": {
"@context": "https://www.w3.org/ns/did/v1",
"id": "did:tenzro:human:550e8400-...",
"verificationMethod": [...],
"authentication": [...]
},
"id": 1
}tenzro_listIdentities
List all identities registered on this node.
{
"jsonrpc": "2.0",
"result": [
{ "did": "did:tenzro:human:...", "display_name": "Alice", "status": "active" },
{ "did": "did:tenzro:machine:...", "status": "active" }
],
"id": 1
}tenzro_addCredential
Add a verifiable credential to an identity.
did— DID to add credential tocredential_type— Credential type (e.g., KycAttestation)issuer— Issuer DIDclaims— Claims object
{
"jsonrpc": "2.0",
"result": { "credential_id": "cred_abc123", "status": "issued" },
"id": 1
}tenzro_addService
Add a service endpoint to a DID Document.
did— DID to add service toservice_type— Service type (e.g., MCP, A2A, LinkedDomains)endpoint— Service endpoint URL
{
"jsonrpc": "2.0",
"result": { "status": "added" },
"id": 1
}tenzro_setUsername
Register a globally unique username for a DID. Usernames must be 3-20 characters, lowercase alphanumeric and underscores only.
did— DID to set the username forusername— Desired username (e.g., alice, bob_42)
{
"jsonrpc": "2.0",
"result": { "username": "alice", "did": "did:tenzro:human:abc..." },
"id": 1
}tenzro_resolveUsername
Resolve a username to its associated DID.
username— Username to resolve
{
"jsonrpc": "2.0",
"result": { "username": "alice", "did": "did:tenzro:human:abc..." },
"id": 1
}Network & Node Methods
tenzro_nodeInfo
Returns information about the node.
{
"jsonrpc": "2.0",
"result": {
"version": "0.1.0",
"role": "validator",
"peer_id": "12D3KooWABC...",
"chain_id": 1337,
"block_height": 1207
},
"id": 1
}tenzro_peerCount
Returns the number of connected peers.
{
"jsonrpc": "2.0",
"result": { "peer_count": 25 },
"id": 1
}tenzro_syncing
Returns the sync status of the node. The node tracks peer heights via periodic StatusMessage gossip on tenzro/status/1.0.0; the highest_block estimate is max(local_tip, max(fresh_peer_heights)). Returns false when caught up (within 2 blocks of the network tip), or { syncing: true, ... } when lagging — drive a catch-up loop with tenzro_getBlockRange.
{
"jsonrpc": "2.0",
"result": { "syncing": true, "starting_block": 0, "current_block": 1207, "highest_block": 4982 },
"id": 1
}tenzro_getHardwareProfile
Detects and returns hardware profile (CPU, RAM, GPUs, TEE support).
{
"jsonrpc": "2.0",
"result": {
"cpu_model": "AMD EPYC 7763",
"cpu_cores": 64,
"total_ram_gb": 256.0,
"gpus": [{ "name": "NVIDIA A100", "memory_gb": 80.0 }],
"tee_support": "AmdSevSnp"
},
"id": 1
}tenzro_setRole
Set the node role.
role— "validator", "provider", "tee-provider", or "user"
{
"jsonrpc": "2.0",
"result": { "role": "provider", "status": "active" },
"id": 1
}tenzro_exportConfig
Export the current node configuration.
{
"jsonrpc": "2.0",
"result": {
"role": "validator",
"listen_addr": "/ip4/0.0.0.0/tcp/9000",
"rpc_addr": "127.0.0.1:8545",
"chain_id": 1337
},
"id": 1
}tenzro_shutdown
Gracefully shut down the node (admin only).
{
"jsonrpc": "2.0",
"result": { "status": "shutting_down" },
"id": 1
}Model & Inference Methods
tenzro_listModels
List available AI models on the network.
category— Filter by category (e.g., "llm", "vision") — optionalmodality— Filter by modality (e.g., "text", "image") — optional
{
"jsonrpc": "2.0",
"result": [
{
"id": "gemma4-9b",
"name": "Gemma 4 9B",
"category": "llm",
"modality": "text",
"price_per_token": "0.0001"
}
],
"id": 1
}tenzro_inferenceRequest
Request raw AI inference from a model. Uses the raw prompt without applying a chat template. For chat applications, prefer tenzro_chat instead.
model_id— Model identifierinput— Raw prompt text (no chat template applied)strategy— Routing strategy: Cheapest, LowestLatency, HighestReputation, Weighted (optional)max_tokens— Maximum tokens to generate (optional)
{
"jsonrpc": "2.0",
"method": "tenzro_inferenceRequest",
"params": [{
"model_id": "gemma4-9b",
"input": "What is the capital of France?",
"strategy": "Cheapest",
"max_tokens": 100
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"request_id": "req_abc123",
"status": "pending",
"estimated_cost": "0.05 TNZO"
},
"id": 1
}tenzro_chat
Send a chat message to a served model. Applies the model's chat template for proper formatting (recommended for chat apps and coding assistants).
model_id— Model identifiermessage— Chat message text (string, not array)max_tokens— Maximum tokens (optional)
{
"jsonrpc": "2.0",
"method": "tenzro_chat",
"params": [{
"model_id": "qwen3.5-0.8b",
"message": "Write a hello world function",
"max_tokens": 200
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"id": "chatcmpl-abc123",
"choices": [{
"message": { "role": "assistant", "content": "Hello! How can I help?" },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 10, "completion_tokens": 8, "total_tokens": 18 }
},
"id": 1
}tenzro_downloadModel
Download a GGUF model from HuggingFace via direct HTTP streaming. Files are saved to ~/.tenzro/models/<model-id>.gguf as a flat file.
model_id— Model identifier or HuggingFace repo
{
"jsonrpc": "2.0",
"method": "tenzro_downloadModel",
"params": [{ "model_id": "gemma4-9b" }],
"id": 1
}{
"jsonrpc": "2.0",
"result": { "status": "downloading", "model_id": "gemma4-9b" },
"id": 1
}tenzro_getDownloadProgress
Check download progress for a model. Includes percentage updates and an error field on failure.
model_id— Model identifier
// Success (in progress):
{
"jsonrpc": "2.0",
"result": { "model_id": "gemma4-9b", "status": "downloading", "progress": 0.75, "downloaded_bytes": 37580963840, "total_bytes": 50107951787 },
"id": 1
}
// Failure:
{
"jsonrpc": "2.0",
"result": { "model_id": "gemma4-9b", "status": "failed", "error": "HTTP 404 from HuggingFace" },
"id": 1
}tenzro_serveModel
Start serving a model for inference requests.
model_id— Model to serveprice_per_token— Price per token in TNZO (optional)
{
"jsonrpc": "2.0",
"result": { "model_id": "gemma4-9b", "status": "serving", "price_per_token": "0.0001" },
"id": 1
}tenzro_stopModel
Stop serving a model. Waits for in-flight inference requests to complete before freeing the llama.cpp context to prevent OOM errors.
model_id— Model to stop
{
"jsonrpc": "2.0",
"result": { "model_id": "gemma4-9b", "status": "stopped" },
"id": 1
}tenzro_deleteModel
Delete a downloaded model from local storage.
model_id— Model to delete
{
"jsonrpc": "2.0",
"result": { "model_id": "gemma4-9b", "deleted": true },
"id": 1
}tenzro_listModelEndpoints
List active model service endpoints with API and MCP URLs.
{
"jsonrpc": "2.0",
"result": [
{
"model_id": "gemma4-9b",
"provider": "0x742d35Cc...",
"api_url": "http://10.0.0.5:8080/v1",
"mcp_url": "http://10.0.0.5:3001/mcp",
"status": "active"
}
],
"id": 1
}tenzro_getModelEndpoint
Get details for a specific model endpoint.
endpoint_id— Endpoint identifier
{
"jsonrpc": "2.0",
"result": {
"endpoint_id": "ep_abc123",
"model_id": "gemma4-9b",
"api_url": "http://10.0.0.5:8080/v1",
"status": "active"
},
"id": 1
}tenzro_registerModelEndpoint
Register a new model service endpoint.
model_id— Model being servedapi_url— API endpoint URLmcp_url— MCP endpoint URL (optional)
{
"jsonrpc": "2.0",
"result": { "endpoint_id": "ep_abc123", "status": "registered" },
"id": 1
}tenzro_unregisterModelEndpoint
Remove a model service endpoint from the registry.
endpoint_id— Endpoint identifier
{
"jsonrpc": "2.0",
"result": { "status": "unregistered" },
"id": 1
}tenzro_discoverModels
Discover models available on the network with filtering.
query— Search query (optional)category— Category filter (optional)
{
"jsonrpc": "2.0",
"result": [
{ "id": "gemma4-9b", "name": "Gemma 4 9B", "providers": 3, "avg_price": "0.0001" }
],
"id": 1
}Forecast (Timeseries) Methods
Load and run ONNX timeseries foundation models (Chronos-Bolt, Granite-TTM, TimesFM 2.5) for univariate forecasting. Backed by an ORT-based TimeseriesRuntime in tenzro-model. Feature-gated behind onnx; default builds expose a stub.
tenzro_loadForecastModel
Load an ONNX timeseries model from HuggingFace into the runtime registry. Pulls the .onnx artifact, opens an ORT session, and registers it under model_id.
model_id— Stable identifier used for subsequent callshf_repo— HuggingFace repo, e.g. "tenzro/timeseries-onnx"hf_filename— ONNX file path within the repo, e.g. "chronos-bolt-base.onnx"context_length— Maximum input history length (e.g. 512)max_horizon— Maximum forecast horizon (e.g. 64)n_quantiles— Number of quantile outputs, or 0 for point forecasts
{
"jsonrpc": "2.0",
"method": "tenzro_loadForecastModel",
"params": [{
"model_id": "chronos-bolt-base",
"hf_repo": "tenzro/timeseries-onnx",
"hf_filename": "chronos-bolt-base.onnx",
"context_length": 512,
"max_horizon": 64,
"n_quantiles": 9
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": { "model_id": "chronos-bolt-base", "status": "loaded" },
"id": 1
}tenzro_unloadForecastModel
Unload a previously loaded forecast model and free its ORT session.
model_id— Identifier passed to tenzro_loadForecastModel
{
"jsonrpc": "2.0",
"result": { "model_id": "chronos-bolt-base", "status": "unloaded" },
"id": 1
}tenzro_listForecastModels
List all currently loaded forecast models.
{
"jsonrpc": "2.0",
"result": [
{ "model_id": "chronos-bolt-base", "context_length": 512, "max_horizon": 64, "n_quantiles": 9 }
],
"id": 1
}tenzro_forecast
Run a forecast against a loaded model. Returns the predicted horizon and, if the model supports it, per-step quantiles.
model_id— Identifier of a loaded forecast modelhistory— Input series as a flat array of f32 values, length ≤ context_lengthhorizon— Forecast horizon (optional; defaults to max_horizon)num_samples— Number of probabilistic samples (optional; model-dependent)
{
"jsonrpc": "2.0",
"method": "tenzro_forecast",
"params": [{
"model_id": "chronos-bolt-base",
"history": [42.1, 43.0, 41.8, 44.2, 45.0],
"horizon": 16
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"forecast": [45.3, 45.8, 46.1, 46.5],
"quantiles": [[44.1, 45.3, 46.5], [44.5, 45.8, 47.0]],
"generation_time_ms": 38
},
"id": 1
}Vision (Image Embedding) Methods
Load ONNX image encoders (CLIP, SigLIP, SigLIP2, DINOv2) and produce dense image embeddings. Backed by VisionRuntime + GenericImageEncoder in tenzro-model. Decode supports PNG, JPEG, and WebP; resize uses Lanczos3. Three normalization presets are provided: clip, imagenet, and siglip. Feature-gated behind onnx.
tenzro_listVisionCatalog
List the verified ONNX vision encoders bundled with the catalog. Each entry carries its HuggingFace repo, input size, embedding dimension, and recommended normalization preset.
{
"jsonrpc": "2.0",
"result": [
{ "id": "clip-vit-b32", "hf_repo": "Xenova/clip-vit-base-patch32", "input_size": 224, "embedding_dim": 512, "normalization": "clip", "license": "MIT" },
{ "id": "clip-vit-l14", "hf_repo": "Xenova/clip-vit-large-patch14", "input_size": 224, "embedding_dim": 768, "normalization": "clip", "license": "MIT" },
{ "id": "siglip-base-224", "embedding_dim": 768, "normalization": "siglip", "license": "Apache-2.0" },
{ "id": "siglip2-base-224", "embedding_dim": 768, "normalization": "siglip", "license": "Apache-2.0" },
{ "id": "dinov2-small", "embedding_dim": 384, "normalization": "imagenet", "license": "Apache-2.0" },
{ "id": "dinov2-base", "embedding_dim": 768, "normalization": "imagenet", "license": "Apache-2.0" },
{ "id": "dinov2-large", "embedding_dim": 1024, "normalization": "imagenet", "license": "Apache-2.0" }
],
"id": 1
}tenzro_loadVisionModel
Load an ONNX image encoder. Two forms: (1) explicit — pass model_id, hf_repo, hf_filename, input_size, embedding_dim, and normalization; (2) catalog shortcut — pass catalog_id matching an entry in tenzro_listVisionCatalog and the runtime fills in the rest via get_vision_model_by_id.
catalog_id— Catalog identifier (e.g. clip-vit-b32) — shortcut formmodel_id— Stable identifier — explicit formhf_repo— HuggingFace repo — explicit formhf_filename— ONNX file path within the repo — explicit forminput_size— Square input edge length (e.g. 224) — explicit formembedding_dim— Output embedding dimension — explicit formnormalization— One of "clip", "imagenet", "siglip" — explicit form
// Catalog shortcut
{
"jsonrpc": "2.0",
"method": "tenzro_loadVisionModel",
"params": [{ "catalog_id": "clip-vit-b32" }],
"id": 1
}
// Explicit form
{
"jsonrpc": "2.0",
"method": "tenzro_loadVisionModel",
"params": [{
"model_id": "clip-vit-b32",
"hf_repo": "Xenova/clip-vit-base-patch32",
"hf_filename": "onnx/vision_model.onnx",
"input_size": 224,
"embedding_dim": 512,
"normalization": "clip"
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": { "model_id": "clip-vit-b32", "status": "loaded" },
"id": 1
}tenzro_unloadVisionModel
Unload a previously loaded vision model.
model_id— Identifier passed to tenzro_loadVisionModel
{
"jsonrpc": "2.0",
"result": { "model_id": "clip-vit-b32", "status": "unloaded" },
"id": 1
}tenzro_listVisionModels
List all currently loaded vision encoders.
{
"jsonrpc": "2.0",
"result": [
{ "model_id": "clip-vit-b32", "input_size": 224, "embedding_dim": 512, "normalization": "clip" }
],
"id": 1
}tenzro_imageEmbed
Encode a single image into a dense embedding. Accepts base64-encoded PNG, JPEG, or WebP. Decoded image is resized to the model's input_size using Lanczos3 and normalized per the model's preset.
model_id— Identifier of a loaded vision modelimage_base64— Base64-encoded image bytes (PNG, JPEG, or WebP)normalize— If true, L2-normalize the output embedding (optional, default false)
{
"jsonrpc": "2.0",
"method": "tenzro_imageEmbed",
"params": [{
"model_id": "clip-vit-b32",
"image_base64": "iVBORw0KGgo...",
"normalize": true
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"model_id": "clip-vit-b32",
"embedding": [0.014, -0.082, 0.123, ...],
"embedding_dim": 512
},
"id": 1
}tenzro_imageTextSimilarity
Compute cosine similarity between two pre-computed embeddings. Pure math — no model load required. Useful for image-text retrieval when text embeddings come from a separate text encoder.
image_embedding— Image embedding vector (array of f32)text_embedding— Text embedding vector (array of f32, same dimension)
{
"jsonrpc": "2.0",
"method": "tenzro_imageTextSimilarity",
"params": [{
"image_embedding": [0.014, -0.082, ...],
"text_embedding": [0.021, -0.075, ...]
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": { "similarity": 0.7421 },
"id": 1
}Zero-shot classification is computed by calling tenzro_imageTextSimilarity against a label list and taking the cosine-similarity argmax.
Text Embedding Methods
Encode text into dense vectors via Qwen3-Embedding 0.6B/4B/8B, EmbeddingGemma-300M (Matryoshka 768/512/256/128), BGE-M3, and Snowflake Arctic Embed L v2.0. Backed by TextEmbeddingRuntime; tokenizer is loaded from the HuggingFace tokenizer.json via the tokenizers crate. Optional Matryoshka dimension truncation with re-normalization.
tenzro_listTextEmbeddingCatalog
List built-in text-embedding entries with HuggingFace repo, max sequence length, embedding dim, fp16/q8/q4 support, and license tier.
{
"jsonrpc": "2.0",
"result": [
{ "id": "embeddinggemma-300m", "embedding_dim": 768, "matryoshka": [768, 512, 256, 128], "license_tier": "CommercialCustom" },
{ "id": "qwen3-embedding-0.6b", "embedding_dim": 1024, "license_tier": "Permissive" },
{ "id": "bge-m3", "embedding_dim": 1024, "license_tier": "Permissive" }
],
"id": 1
}tenzro_loadTextEmbeddingModel
Load a text encoder. Catalog form (catalog_id) or explicit form (model_id, hf_repo, tokenizer_filename, model_filename, max_seq_len).
tenzro_unloadTextEmbeddingModel
Unload a text encoder and release its tokenizer + ORT session.
tenzro_listTextEmbeddingModels
List currently loaded text encoders.
tenzro_textEmbed
Encode one or more text inputs to embedding vectors. Optional Matryoshka truncation with L2 re-normalization.
model_id— Identifier of a loaded text encoderinputs— Array of strings to encodedimension— Optional Matryoshka truncation dim (must be supported by the model)normalize— If true, L2-normalize after truncation (default true)
{
"jsonrpc": "2.0",
"method": "tenzro_textEmbed",
"params": [{
"model_id": "embeddinggemma-300m",
"inputs": ["Tenzro is a purpose-built ledger for the AI age."],
"dimension": 512
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"model_id": "embeddinggemma-300m",
"embeddings": [[0.014, -0.082, ...]],
"embedding_dim": 512
},
"id": 1
}Segmentation Methods
Two-pass encoder/decoder runtime serving SAM 3 / SAM 3.1 / SAM 2 / EdgeSAM / MobileSAM. The encoder caches a per-image embedding and the decoder consumes the embedding plus point or box prompts to emit masks. Backed by SegmentationRuntime.
tenzro_listSegmentationCatalog
List SAM-family entries with encoder/decoder file pairs and license tier (SAM is CommercialCustom).
tenzro_loadSegmentationModel
Load encoder + decoder bundle. CommercialCustom entries require accept_license to be set in the params.
tenzro_unloadSegmentationModel
Unload a segmentation model and clear its embedding cache.
tenzro_listSegmentationModels
List currently loaded segmentation models.
tenzro_segment
Run segmentation against a base64-encoded image with one or more prompts (points or boxes). Returns one or more binary masks.
model_id— Identifier of a loaded segmentation modelimage_base64— Base64-encoded PNG / JPEG / WebPprompts— Array of SegmentPrompt — { type: 'point' | 'box', x?, y?, label?, x0?, y0?, x1?, y1? }
{
"jsonrpc": "2.0",
"method": "tenzro_segment",
"params": [{
"model_id": "sam-3",
"image_base64": "iVBORw0KGgo...",
"prompts": [{ "type": "point", "x": 320, "y": 240, "label": 1 }]
}],
"id": 1
}{
"jsonrpc": "2.0",
"result": {
"model_id": "sam-3",
"masks": [{ "rle": "...", "score": 0.94 }]
},
"id": 1
}Detection Methods
NMS-free DETR-family object detection over RF-DETR (nano/small/medium/base/large/2xl) and D-FINE (n/s/m/l/x). Sigmoid + score-threshold postprocessing returns box coordinates, label ids, and confidence. Backed by DetectionRuntime.
tenzro_listDetectionCatalog
List RF-DETR and D-FINE entries with input size and class count.
tenzro_loadDetectionModel
Load a detection model (catalog or explicit form).
tenzro_unloadDetectionModel
Unload a detection model.
tenzro_listDetectionModels
List currently loaded detection models.
tenzro_detect
Detect objects in an image. Returns { bbox, label_id, score } per detection above the threshold.
model_id— Identifier of a loaded detection modelimage_base64— Base64-encoded PNG / JPEG / WebPscore_threshold— Minimum confidence (default 0.3)
{
"jsonrpc": "2.0",
"result": {
"model_id": "rf-detr-medium",
"detections": [
{ "bbox": [120, 80, 360, 410], "label_id": 17, "score": 0.91 }
]
},
"id": 1
}Audio (ASR) Methods
Speech-to-text for Whisper-style encoder/decoder bundles (Distil-Whisper small.en/medium.en/large-v3, Whisper-large-v3-turbo), single-encoder Moonshine v2 (tiny/base), and NVIDIA Parakeet-TDT-0.6B-v3 + Canary-1B-Flash (encoder/decoder/joiner). WAV via hound; MP3/FLAC via symphonia; mel-spectrogram via realfft. Backed by AudioRuntime.
tenzro_listAudioCatalog
List ASR entries with encoder/decoder/joiner bundle layout, sample rate, and license tier.
tenzro_loadAudioModel
Load an ASR bundle. Bundle artifacts are pulled via HfArtifactDownloader::Bundle.
tenzro_unloadAudioModel
Unload an ASR model.
tenzro_listAudioModels
List currently loaded ASR models.
tenzro_transcribe
Transcribe an audio clip. Accepts raw bytes (WAV, MP3, FLAC) base64-encoded. Returns the full transcript and per-segment timestamps.
model_id— Identifier of a loaded ASR modelaudio_base64— Base64-encoded audio byteslanguage— Optional ISO-639-1 hint (Whisper / Canary multilingual)
{
"jsonrpc": "2.0",
"result": {
"model_id": "whisper-large-v3-turbo",
"transcript": "Tenzro is a purpose-built ledger for the AI age.",
"segments": [{ "start_ms": 0, "end_ms": 3200, "text": "Tenzro is a purpose-built ledger..." }]
},
"id": 1
}Video Methods
Frame-extraction (shell-out to ffmpeg) plus per-frame embedding via a vision encoder mean-pooled across sampled frames. Backed by VideoRuntime. Native video catalog is intentionally empty in this wave — no permissive ONNX-shippable encoder-only video model exists yet; runtime scaffolding is ready for future entries.
tenzro_listVideoCatalog
List native video entries (returns [] in this wave).
tenzro_loadVideoModel
Load a video model. Currently used for the vision-encoder fallback path.
tenzro_unloadVideoModel
Unload a video model.
tenzro_listVideoModels
List currently loaded video models.
tenzro_videoEmbed
Embed a video by extracting frames with ffmpeg, encoding each frame via a loaded vision model, and mean-pooling the resulting embeddings.
model_id— Identifier of a loaded vision encoder used for frame embeddingvideo_base64— Base64-encoded video bytes (any container ffmpeg can decode)frames— Number of evenly-spaced frames to sample (default 8)
{
"jsonrpc": "2.0",
"result": {
"model_id": "siglip2-base",
"embedding": [0.014, -0.082, ...],
"embedding_dim": 768,
"frames_sampled": 8
},
"id": 1
}Provider Methods
tenzro_registerProvider
Register as a network provider (validator, model provider, or TEE provider).
provider_type— "validator", "inference", or "tee"stake_amount— Amount of TNZO to stake (optional)
{
"jsonrpc": "2.0",
"result": { "provider_id": "prov_abc123", "status": "registered" },
"id": 1
}tenzro_providerStats
Get provider statistics: served models, inferences, staking totals.
provider_id— Provider identifier (optional, defaults to self)
{
"jsonrpc": "2.0",
"result": {
"models_served": 3,
"total_inferences": 15420,
"total_staked": "10000.0",
"uptime_percentage": 99.7
},
"id": 1
}tenzro_listProviders
List all registered providers on the network.
{
"jsonrpc": "2.0",
"result": [
{ "provider_id": "prov_abc123", "type": "inference", "models": 3, "status": "active" }
],
"id": 1
}tenzro_setProviderSchedule
Set provider availability schedule.
schedule— Schedule object with days and hours
{
"jsonrpc": "2.0",
"result": { "status": "schedule_set" },
"id": 1
}tenzro_getProviderSchedule
Get the current provider availability schedule.
{
"jsonrpc": "2.0",
"result": { "schedule": { "enabled": true, "days": ["mon","tue","wed","thu","fri"], "hours": "08:00-20:00" } },
"id": 1
}tenzro_setProviderPricing
Set pricing for provider services.
model_id— Model to set pricing forprice_per_token— Price per token in TNZO
{
"jsonrpc": "2.0",
"result": { "status": "pricing_set", "model_id": "gemma4-9b", "price_per_token": "0.0001" },
"id": 1
}tenzro_getProviderPricing
Get current provider pricing configuration.
{
"jsonrpc": "2.0",
"result": { "models": [{ "model_id": "gemma4-9b", "price_per_token": "0.0001" }] },
"id": 1
}tenzro_addResource
Add a compute resource to the provider node.
resource_type— "gpu", "cpu", or "storage"details— Resource details object
{
"jsonrpc": "2.0",
"result": { "status": "resource_added" },
"id": 1
}Payment Methods
tenzro_createPaymentChallenge
Create an HTTP 402 payment challenge for a resource.
resource— Resource URL or identifieramount— Amount in TNZOprotocol— "mpp", "x402", or "native"
{
"jsonrpc": "2.0",
"result": {
"challenge_id": "ch_abc123",
"protocol": "mpp",
"amount": "0.05",
"expires_at": "2026-04-10T13:00:00Z"
},
"id": 1
}tenzro_payMpp
Pay using MPP (Machine Payments Protocol, co-authored by Stripe and Tempo).
challenge_id— Challenge ID from createPaymentChallengewallet_address— Payer wallet address
{
"jsonrpc": "2.0",
"result": { "receipt_id": "rcpt_def456", "status": "paid", "transaction_hash": "0xabc123..." },
"id": 1
}tenzro_payX402
Pay using x402 (Coinbase HTTP 402 protocol).
challenge_id— Challenge IDwallet_address— Payer wallet address
{
"jsonrpc": "2.0",
"result": { "receipt_id": "rcpt_ghi789", "status": "paid", "facilitator": "coinbase_cdp" },
"id": 1
}tenzro_payVisaTap
Pay using Visa TAP (Token Authorization Protocol) for fiat-to-crypto settlement.
challenge_id— Challenge IDagent_did— Agent DID for authorization
{
"jsonrpc": "2.0",
"result": { "receipt_id": "rcpt_visa001", "status": "paid", "rail": "visa_tap" },
"id": 1
}tenzro_payMastercard
Pay using Mastercard Agent Pay for autonomous agent transactions.
challenge_id— Challenge IDagent_did— Agent DID for authorization
{
"jsonrpc": "2.0",
"result": { "receipt_id": "rcpt_mc001", "status": "paid", "rail": "mastercard_agent_pay" },
"id": 1
}tenzro_listPaymentSessions
List active payment sessions.
{
"jsonrpc": "2.0",
"result": [
{ "session_id": "sess_abc", "protocol": "mpp", "status": "active", "amount_spent": "0.5" }
],
"id": 1
}tenzro_paymentGatewayInfo
Get payment gateway configuration and supported protocols.
{
"jsonrpc": "2.0",
"result": {
"supported_protocols": ["mpp", "x402", "native", "visa_tap", "mastercard_agent_pay"],
"default_protocol": "mpp"
},
"id": 1
}tenzro_getPaymentReceipt
Get a payment receipt by ID.
receipt_id— Receipt identifier
{
"jsonrpc": "2.0",
"result": {
"receipt_id": "rcpt_def456",
"protocol": "mpp",
"amount": "0.05",
"status": "confirmed",
"transaction_hash": "0xabc123..."
},
"id": 1
}Staking Methods
tenzro_stake
Stake TNZO tokens for validation, inference, or TEE provision.
amount— Amount of TNZO to stakeprovider_type— "validator", "inference", or "tee"lock_days— Lock period in days (optional)
{
"jsonrpc": "2.0",
"result": { "stake_id": "stake_abc123", "transaction_hash": "0xdef456...", "status": "staked" },
"id": 1
}tenzro_unstake
Withdraw staked tokens (7-day unbonding period).
amount— Amount to unstakeforce— Force immediate unstake with penalty (optional)
{
"jsonrpc": "2.0",
"result": { "unbonding_period": "7 days", "available_after": "2026-04-17T12:00:00Z" },
"id": 1
}tenzro_getVotingPower
Get voting power and staking info for an address.
address— Address to check
{
"jsonrpc": "2.0",
"result": { "total_staked": "1000.0", "rewards": "25.5", "apy": "12.5%" },
"id": 1
}Governance Methods
tenzro_listProposals
List all governance proposals.
{
"jsonrpc": "2.0",
"result": [
{
"proposal_id": "prop_001",
"title": "Increase validator rewards",
"proposal_type": "parameter",
"status": "active",
"votes_for": "50000",
"votes_against": "12000",
"approval_percentage": "80.6%"
}
],
"id": 1
}tenzro_createProposal
Create a new governance proposal.
title— Proposal titledescription— Detailed descriptionproposal_type— "parameter", "treasury", "upgrade", or "emergency"
{
"jsonrpc": "2.0",
"result": { "proposal_id": "prop_002", "status": "created" },
"id": 1
}tenzro_vote
Vote on a governance proposal.
proposal_id— Proposal identifiervote— "For", "Against", or "Abstain"justification— Optional voting justification
{
"jsonrpc": "2.0",
"result": { "status": "vote_recorded" },
"id": 1
}tenzro_delegateVotingPower
Delegate voting power to another address.
delegator— Delegating addressdelegatee— Receiving addressamount— Amount of voting power
{
"jsonrpc": "2.0",
"result": { "status": "delegated" },
"id": 1
}Agent Methods
tenzro_registerAgent
Register an AI agent on the network with capabilities.
name— Agent namecapabilities— Array of capability strings
{
"jsonrpc": "2.0",
"result": { "agent_id": "agent_xyz789", "did": "did:tenzro:machine:...", "status": "active" },
"id": 1
}tenzro_listAgents
List all registered agents.
{
"jsonrpc": "2.0",
"result": [
{ "agent_id": "agent_xyz789", "name": "DataProcessor", "capabilities": ["inference"], "status": "active" }
],
"id": 1
}tenzro_sendAgentMessage
Send a message to a registered agent.
agent_id— Target agent identifiermessage— Message contenttask_type— Task type classification (optional)
{
"jsonrpc": "2.0",
"result": { "task_id": "task_jkl456", "status": "queued" },
"id": 1
}tenzro_spawnAgent
Spawn a new autonomous agent instance.
name— Agent namecapabilities— Capabilities arrayconfig— Agent configuration object (optional)
{
"jsonrpc": "2.0",
"result": { "agent_id": "agent_new123", "status": "spawned" },
"id": 1
}tenzro_runAgentTask
Execute a task on an existing agent.
agent_id— Agent identifiertask— Task descriptioninput— Input data
{
"jsonrpc": "2.0",
"result": { "task_id": "task_run123", "status": "running" },
"id": 1
}tenzro_createSwarm
Create a multi-agent swarm for complex tasks.
name— Swarm nameagents— Array of agent IDscoordinator— Coordinator agent ID
{
"jsonrpc": "2.0",
"result": { "swarm_id": "swarm_abc", "agents": 3, "status": "active" },
"id": 1
}tenzro_getSwarmStatus
Get status of a multi-agent swarm.
swarm_id— Swarm identifier
{
"jsonrpc": "2.0",
"result": { "swarm_id": "swarm_abc", "agents": 3, "tasks_completed": 12, "status": "active" },
"id": 1
}tenzro_terminateSwarm
Terminate a multi-agent swarm.
swarm_id— Swarm identifier
{
"jsonrpc": "2.0",
"result": { "status": "terminated" },
"id": 1
}tenzro_delegateTask
Delegate a task from one agent to another.
from_agent— Source agent IDto_agent— Target agent IDtask— Task description
{
"jsonrpc": "2.0",
"result": { "delegation_id": "del_abc", "status": "delegated" },
"id": 1
}tenzro_discoverAgents
Discover agents on the network by capability.
capability— Required capability (optional)
{
"jsonrpc": "2.0",
"result": [
{ "agent_id": "agent_xyz", "capabilities": ["inference", "settlement"], "reputation": 0.95 }
],
"id": 1
}tenzro_spawnAgentWithSkill
Spawn an agent with a pre-registered skill from the Skills Registry.
skill_id— Skill identifierconfig— Agent configuration (optional)
{
"jsonrpc": "2.0",
"result": { "agent_id": "agent_skill123", "skill": "solana-defi", "status": "spawned" },
"id": 1
}tenzro_fundAgent
Fund an agent wallet with TNZO for autonomous transactions.
agent_id— Agent identifieramount— Amount in TNZO
{
"jsonrpc": "2.0",
"result": { "transaction_hash": "0xabc...", "new_balance": "100.0" },
"id": 1
}tenzro_swapToken
Swap tokens on behalf of an agent.
agent_id— Agent identifierfrom_token— Source tokento_token— Target tokenamount— Amount to swap
{
"jsonrpc": "2.0",
"result": { "swap_id": "swap_abc", "received": "99.5", "status": "completed" },
"id": 1
}tenzro_agentPayForInference
Agent pays for an inference request using its wallet.
agent_id— Agent identifiermodel_id— Model to pay foramount— Amount in TNZO
{
"jsonrpc": "2.0",
"result": { "payment_id": "pay_abc", "status": "paid" },
"id": 1
}Task Marketplace Methods
tenzro_postTask
Post a new task to the marketplace.
title— Task titledescription— Task descriptionbudget— Maximum budget in TNZOrequirements— Required capabilities (optional)
{
"jsonrpc": "2.0",
"result": { "task_id": "task_mkt_001", "status": "open" },
"id": 1
}tenzro_listTasks
List tasks in the marketplace.
status— Filter by status: "open", "assigned", "completed" (optional)
{
"jsonrpc": "2.0",
"result": [
{ "task_id": "task_mkt_001", "title": "Analyze dataset", "budget": "10.0", "status": "open" }
],
"id": 1
}tenzro_getTask
Get details of a specific task.
task_id— Task identifier
{
"jsonrpc": "2.0",
"result": {
"task_id": "task_mkt_001",
"title": "Analyze dataset",
"description": "...",
"budget": "10.0",
"status": "open",
"quotes": []
},
"id": 1
}tenzro_cancelTask
Cancel an open task.
task_id— Task identifier
{
"jsonrpc": "2.0",
"result": { "status": "cancelled" },
"id": 1
}tenzro_quoteTask
Submit a quote for an open task.
task_id— Task identifierprice— Quoted price in TNZOestimated_time— Estimated completion time
{
"jsonrpc": "2.0",
"result": { "quote_id": "quote_abc", "status": "submitted" },
"id": 1
}tenzro_assignTask
Assign a task to a quoted provider.
task_id— Task identifierquote_id— Accepted quote ID
{
"jsonrpc": "2.0",
"result": { "status": "assigned" },
"id": 1
}tenzro_completeTask
Mark a task as completed with result.
task_id— Task identifierresult— Task result data
{
"jsonrpc": "2.0",
"result": { "status": "completed", "settlement_hash": "0xabc..." },
"id": 1
}tenzro_updateTask
Update task details or status.
task_id— Task identifierupdates— Fields to update
{
"jsonrpc": "2.0",
"result": { "status": "updated" },
"id": 1
}Agent Marketplace Methods
tenzro_registerAgentTemplate
Register an agent template in the marketplace.
name— Template namedescription— Template descriptioncapabilities— Capabilities arrayprice— Price to use template (TNZO)
{
"jsonrpc": "2.0",
"result": { "template_id": "tmpl_abc", "status": "registered" },
"id": 1
}tenzro_listAgentTemplates
List available agent templates.
{
"jsonrpc": "2.0",
"result": [
{ "template_id": "tmpl_abc", "name": "DeFi Trader", "capabilities": ["trade", "analysis"], "price": "5.0" }
],
"id": 1
}tenzro_getAgentTemplate
Get details of a specific agent template.
template_id— Template identifier
{
"jsonrpc": "2.0",
"result": { "template_id": "tmpl_abc", "name": "DeFi Trader", "description": "...", "capabilities": [...] },
"id": 1
}tenzro_downloadAgentTemplate
Download an agent template for local use.
template_id— Template identifier
{
"jsonrpc": "2.0",
"result": { "status": "downloaded", "path": "~/.tenzro/templates/tmpl_abc" },
"id": 1
}tenzro_updateAgentTemplate
Update an existing agent template.
template_id— Template identifierupdates— Fields to update
{
"jsonrpc": "2.0",
"result": { "status": "updated" },
"id": 1
}tenzro_spawnAgentTemplate
Spawn an agent from a marketplace template.
template_id— Template identifierconfig— Instance configuration (optional)
{
"jsonrpc": "2.0",
"result": { "agent_id": "agent_tmpl_001", "template_id": "tmpl_abc", "status": "spawned" },
"id": 1
}tenzro_runAgentTemplate
Run a task using an agent template without persistent spawn.
template_id— Template identifiertask— Task to execute
{
"jsonrpc": "2.0",
"result": { "task_id": "task_tmpl_001", "status": "running" },
"id": 1
}Skills Registry Methods
tenzro_registerSkill
Register a new skill in the Skills Registry.
name— Skill name (e.g., solana-defi)category— Category (defi, bridge, oracle, etc.)description— Skill descriptiontags— Array of tagsmcp_endpoint— MCP server endpoint (optional)
{
"jsonrpc": "2.0",
"result": { "skill_id": "skill_abc", "status": "registered" },
"id": 1
}tenzro_listSkills
List all registered skills.
{
"jsonrpc": "2.0",
"result": [
{ "skill_id": "openclaw-tenzro", "category": "blockchain", "tags": ["blockchain","ai","identity"] },
{ "skill_id": "solana-defi", "category": "defi", "tags": ["solana","defi","swap"] }
],
"id": 1
}tenzro_searchSkills
Search skills by keyword or tag.
query— Search query
{
"jsonrpc": "2.0",
"result": [
{ "skill_id": "solana-defi", "relevance": 0.95 }
],
"id": 1
}tenzro_useSkill
Invoke a registered skill.
skill_id— Skill identifieraction— Action to performparams— Action parameters
{
"jsonrpc": "2.0",
"result": { "execution_id": "exec_abc", "status": "completed", "result": {...} },
"id": 1
}tenzro_getSkill
Get details of a specific skill.
skill_id— Skill identifier
{
"jsonrpc": "2.0",
"result": { "skill_id": "solana-defi", "name": "Solana DeFi", "category": "defi", "tools": 14 },
"id": 1
}tenzro_updateSkill
Update a registered skill definition.
skill_id— Skill identifierupdates— Fields to update
{
"jsonrpc": "2.0",
"result": { "status": "updated" },
"id": 1
}Tools Registry Methods
tenzro_registerTool
Register a new tool (MCP server, API, etc.) in the Tools Registry.
name— Tool nametool_type— "mcp", "api", or "cli"endpoint— Tool endpoint URLdescription— Tool description
{
"jsonrpc": "2.0",
"result": { "tool_id": "tool_abc", "status": "registered" },
"id": 1
}tenzro_listTools
List all registered tools.
{
"jsonrpc": "2.0",
"result": [
{ "tool_id": "tenzro-solana-mcp", "type": "mcp", "endpoint": "/mcp (port 3003)" },
{ "tool_id": "tenzro-ethereum-mcp", "type": "mcp", "endpoint": "/mcp (port 3004)" }
],
"id": 1
}tenzro_searchTools
Search tools by keyword or type.
query— Search querytype— Tool type filter (optional)
{
"jsonrpc": "2.0",
"result": [{ "tool_id": "tenzro-solana-mcp", "relevance": 0.9 }],
"id": 1
}tenzro_useTool
Invoke a registered tool.
tool_id— Tool identifieraction— Action to performparams— Action parameters
{
"jsonrpc": "2.0",
"result": { "execution_id": "exec_tool_abc", "status": "completed", "result": {...} },
"id": 1
}tenzro_getTool
Get details of a specific tool.
tool_id— Tool identifier
{
"jsonrpc": "2.0",
"result": { "tool_id": "tenzro-solana-mcp", "type": "mcp", "endpoint": "/mcp (port 3003)" },
"id": 1
}tenzro_updateTool
Update a registered tool definition.
tool_id— Tool identifierupdates— Fields to update
{
"jsonrpc": "2.0",
"result": { "status": "updated" },
"id": 1
}Token Registry Methods
tenzro_createToken
Create a new ERC-20 token via the factory and register in the unified registry.
name— Token namesymbol— Token symboldecimals— Decimal places (default 18)initial_supply— Initial supply to mint
{
"jsonrpc": "2.0",
"result": {
"token_id": "tok_abc123",
"address": "0x1234...",
"symbol": "MYTOKEN",
"status": "created"
},
"id": 1
}tenzro_getToken
Lookup a token by symbol, address, or token ID.
identifier— Token symbol, EVM address, or token ID
{
"jsonrpc": "2.0",
"result": {
"token_id": "tok_abc123",
"name": "My Token",
"symbol": "MYTOKEN",
"decimals": 18,
"total_supply": "1000000.0",
"vm_type": "evm"
},
"id": 1
}tenzro_listTokens
List registered tokens with optional VM type filter.
vm_type— "evm", "svm", or "daml" (optional)
{
"jsonrpc": "2.0",
"result": [
{ "token_id": "tok_abc", "symbol": "MYTOKEN", "vm_type": "evm" },
{ "token_id": "native", "symbol": "TNZO", "vm_type": "native" }
],
"id": 1
}tenzro_crossVmTransfer
Atomic cross-VM token transfer using the TNZO pointer model (no bridge risk).
token_id— Token identifierfrom_vm— Source VM typeto_vm— Target VM typeamount— Amount to transferrecipient— Recipient address on target VM
{
"jsonrpc": "2.0",
"result": { "transfer_id": "xvm_abc", "status": "completed" },
"id": 1
}tenzro_wrapTnzo
Wrap native TNZO to a VM-specific representation (wTNZO ERC-20, SPL adapter, CIP-56).
amount— Amount to wraptarget_vm— "evm", "svm", or "daml"
{
"jsonrpc": "2.0",
"result": { "wrapped_amount": "100.0", "vm": "evm", "contract": "0x7a4bcb13..." },
"id": 1
}tenzro_getTokenBalance
Get TNZO balance across all VMs with decimal conversion.
address— Account address
{
"jsonrpc": "2.0",
"result": {
"native": "1000.0",
"evm": "1000.0",
"svm": "1000.0",
"daml": "1000.0"
},
"id": 1
}tenzro_deployContract
Deploy bytecode to EVM, SVM, or DAML via the MultiVmRuntime.
vm_type— "evm", "svm", or "daml"bytecode— Contract bytecode (hex)constructor_args— Constructor arguments (optional)
{
"jsonrpc": "2.0",
"result": {
"contract_address": "0x5678...",
"vm_type": "evm",
"transaction_hash": "0xabc...",
"gas_used": 2100000
},
"id": 1
}Settlement & Escrow Methods
tenzro_settle
Settle a payment between parties.
payer— Payer addresspayee— Payee addressamount— Settlement amount in TNZOproof— Settlement proof (optional)
{
"jsonrpc": "2.0",
"result": { "settlement_id": "settle_abc", "transaction_hash": "0xdef...", "status": "settled" },
"id": 1
}tenzro_getSettlement
Get details of a settlement by ID.
settlement_id— Settlement identifier
{
"jsonrpc": "2.0",
"result": {
"settlement_id": "settle_abc",
"payer": "0x742d...",
"payee": "0x8Ba1...",
"amount": "50.0",
"status": "confirmed"
},
"id": 1
}tenzro_signAndSendTransaction
Submit a CreateEscrow / ReleaseEscrow / RefundEscrow transaction. Escrow is a consensus-mediated primitive — writes flow through signed transactions only. Authentication is ambient: the caller sets TENZRO_BEARER_JWT + TENZRO_DPOP_PROOF (or sends Authorization: DPoP <jwt> + DPoP: <proof> headers directly), and the node resolves the signer from the JWT's MPC wallet.
from— Payer address (must equal the DID's bound MPC wallet)to— Payee address (CreateEscrow) or any address (Release/Refund)value— Always 0 (the amount lives in tx_type.data)gas_limit— 75000 / 60000 / 50000 for Create / Release / Refundgas_price— Wei per gas (e.g. 1000000000)nonce— Sender noncechain_id— Chain idtx_type— { type: 'CreateEscrow' | 'ReleaseEscrow' | 'RefundEscrow', data: { ... } }
{
"jsonrpc": "2.0",
"result": { "tx_hash": "0x...", "escrow_id": "0x..." },
"id": 1
}tenzro_getEscrow
Read an escrow record by escrow_id (sourced from CF_SETTLEMENTS).
escrow_id— Hex escrow identifier (derived from payer + nonce)
{
"jsonrpc": "2.0",
"result": {
"escrow_id": "0x...",
"payer": "0x...",
"payee": "0x...",
"vault": "0x...",
"amount": "1000000000000000000",
"asset_id": "TNZO",
"status": "Funded",
"release_conditions": { "type": "Timeout" },
"expires_at": 1735689600000
},
"id": 1
}tenzro_listEscrowsByPayer
List all escrow ids for a given payer address.
payer— Payer address
{
"jsonrpc": "2.0",
"result": ["0x...", "0x..."],
"id": 1
}tenzro_listEscrowsByPayee
List all escrow ids for a given payee address.
payee— Payee address
{
"jsonrpc": "2.0",
"result": ["0x...", "0x..."],
"id": 1
}tenzro_openPaymentChannel
Open a micropayment channel for off-chain per-token billing.
counterparty— Counterparty addressdeposit— Initial deposit amount
{
"jsonrpc": "2.0",
"result": { "channel_id": "channel_stu456", "deposit": "100.0", "status": "open" },
"id": 1
}tenzro_closePaymentChannel
Close a micropayment channel and settle final balances.
channel_id— Channel identifier
{
"jsonrpc": "2.0",
"result": { "status": "closed", "final_balances": { "spent": "35.2", "remaining": "64.8" } },
"id": 1
}tenzro_getDispute
Read a single channel-dispute record from CF_CHANNELS (dispute:<id> prefix). Returns -32004 if no record exists.
dispute_id— Dispute identifier (returned when the dispute was opened)
{
"jsonrpc": "2.0",
"result": {
"dispute_id": "0x...",
"channel_id": "channel_stu456",
"challenger": "0x...",
"evidence": "0x...",
"status": "Open",
"opened_at": 1735689600000,
"timeout_at": 1735776000000,
"resolved_at": null,
"resolution": null
},
"id": 1
}tenzro_listDisputesByChannel
List every dispute (open or historical) attached to a channel. Empty list (not error) for channels with no disputes.
channel_id— Channel identifier to list disputes for
{
"jsonrpc": "2.0",
"result": {
"channel_id": "channel_stu456",
"count": 1,
"disputes": [{ "dispute_id": "0x...", "status": "Open", "opened_at": 1735689600000 }]
},
"id": 1
}Provenance & Reputation Methods
EU AI Act Article 50(2) requires synthetic content to carry a machine-readable origin marker; Tenzro records a C2PA-style ProvenanceManifest per generation, keyed by SHA-256 content hash. Provider reputation is the asymmetric +1/−5 score consumed by the inference router.
tenzro_getProvenance
Resolve the cached ProvenanceManifest for a 32-byte content hash. Returns -32004 if no manifest is recorded for that hash.
content_hash— SHA-256 hex of the inference output bytes (0x-prefix optional)
{
"jsonrpc": "2.0",
"result": {
"content_hash": "0x...",
"model_id": "gemma4-9b",
"provider": "0x...",
"assertion": "ai-generated",
"signed_at": 1735689600000,
"signer_public_key": "0x...",
"algorithm": "ed25519",
"signature": "0x..."
},
"id": 1
}tenzro_getProviderReputation
Read the durable reputation score (0–1000) for a provider address. +1 per success (saturating to 1000), −5 per failure (saturating to 0).
provider— Provider address (hex, 0x-prefix optional)
{
"jsonrpc": "2.0",
"result": { "provider": "0x...", "reputation": 947 },
"id": 1
}AP2 (Agent Payments Protocol) Methods
AP2 is mandate-based: principals issue Ed25519-signed Verifiable Digital Credentials (VDCs) — Intent and Cart mandates — that authorize agent spending. Tenzro's AP2 surface verifies the cryptographic envelope and validates the cart-against-intent scope. Settlement happens through the standard payment paths (tenzro_payMpp, tenzro_payX402, on-chain transfer).
tenzro_ap2ProtocolInfo
Return AP2 protocol metadata: version, signing algorithm, supported mandate kinds and presence modes.
{
"jsonrpc": "2.0",
"result": {
"version": "0.1.0",
"signing_alg": "ed25519",
"mandate_kinds": ["intent", "cart"],
"presence_modes": ["human_present", "human_not_present"],
"position": "TDIP identifies. AP2 authorizes. Tenzro settles."
},
"id": 1
}tenzro_ap2VerifyMandate
Verify the Ed25519 signature on a single AP2 VDC and return its parsed metadata.
vdc— AP2 VDC object (intent or cart mandate JSON)
{
"jsonrpc": "2.0",
"result": {
"valid": true,
"mandate_id": "01HR...",
"kind": "intent",
"signer_did": "did:tenzro:human:abc...",
"alg": "ed25519"
},
"id": 1
}tenzro_ap2ValidateMandatePair
Cross-validate a cart mandate against its parent intent mandate — checks signatures, scope, expiry, and amount bounds.
intent_vdc— Intent mandate VDC (signed by principal)cart_vdc— Cart mandate VDC (signed by agent)
{
"jsonrpc": "2.0",
"result": {
"valid": true,
"intent_mandate_id": "01HR...",
"cart_mandate_id": "01HR...",
"principal_did": "did:tenzro:human:abc...",
"agent_did": "did:tenzro:machine:def..."
},
"id": 1
}Canton/DAML Methods
tenzro_listCantonDomains
List configured Canton domains for enterprise DAML integration.
{
"jsonrpc": "2.0",
"result": {
"enabled": true,
"domains": [
{ "id": "enterprise-domain", "host": "canton.example.com", "port": 10011, "status": "connected" }
]
},
"id": 1
}tenzro_listDamlContracts
List active DAML contracts on Canton ledger.
template_id— Template filter (optional)
{
"jsonrpc": "2.0",
"result": {
"contracts": [
{ "contract_id": "contract_vwx", "template_id": "AssetTransfer.Template", "party": "Alice::party" }
]
},
"id": 1
}tenzro_submitDamlCommand
Submit a DAML command to the Canton ledger (JSON Ledger API v2).
command_type— "create", "exercise", or "exercise_by_key"template_id— Template identifierparty— Party identifier
{
"jsonrpc": "2.0",
"result": { "submitted": true, "canton_host": "canton.example.com" },
"id": 1
}Web Verification API
HTTP endpoints on port 8080 for cryptographic verification. Testnet: https://api.tenzro.network
| Method | Description |
|---|---|
POST /api/verify/zk-proof | Verify Groth16, PlonK, or STARK proof |
POST /api/verify/tee-attestation | Verify TEE attestation (TDX, SEV-SNP, Nitro, NVIDIA) |
POST /api/verify/transaction | Verify transaction signature (Ed25519/Secp256k1) |
POST /api/verify/settlement | Verify settlement receipt |
POST /api/verify/inference | Verify inference result with ZK proof |
GET /api/verify/health | Health check |
GET /api/health | Health check (alias) |
GET /api/status | Node status and metrics |
POST /api/faucet | Request testnet TNZO (100 per request, 24h cooldown) |
POST /api/verify/zk-proof
Verify a zero-knowledge proof with structural validation.
{
"proof_type": "groth16",
"proof_bytes": "0xabc123...",
"public_inputs": ["0x123", "0x456"],
"verification_key": "0xdef789..."
}{
"valid": true,
"details": {
"proof_type": "groth16",
"public_inputs_count": 2,
"proof_size_bytes": 128,
"status": "verified"
},
"verified_at": "2026-04-10T12:00:00Z"
}POST /api/verify/tee-attestation
Verify a TEE attestation report with X.509 certificate chain validation.
{
"attestation_data": "0xdef456...",
"vendor": "intel_tdx",
"report_data": "0xabcdef..."
}{
"valid": true,
"details": { "vendor": "intel_tdx", "attestation_size": 64 },
"verified_at": "2026-04-10T12:00:00Z"
}POST /api/verify/transaction
Verify a transaction signature using Ed25519 or Secp256k1.
{
"tx_hash": "0x789abc...",
"sender": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5",
"signature": "0xdef123...",
"public_key": "0x0123456789abcdef..."
}{
"valid": true,
"details": { "key_type": "ed25519", "sender_match": true, "signature_valid": true },
"verified_at": "2026-04-10T12:00:00Z"
}GET /api/status
Node status and network metrics.
{
"block_height": 1207,
"peer_count": 25,
"chain_id": 1337,
"sync_status": "synced"
}Error Codes
All APIs return standard JSON-RPC 2.0 error responses:
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params"
},
"id": 1
}| Method | Description |
|---|---|
-32700 | Parse error — invalid JSON |
-32600 | Invalid request — missing required fields |
-32601 | Method not found |
-32602 | Invalid params — wrong type or missing required params |
-32603 | Internal error — server-side failure |
-32000 | Server error — generic application error |
-32001 | Resource not found (block, tx, identity) |
-32002 | Insufficient funds |
-32003 | Unauthorized — invalid credentials or permissions |
Complete Method Reference
All 200 RPC methods organized by namespace:
Ethereum Compatible (20)
eth_blockNumber eth_getBalance eth_getTransactionCount eth_sendRawTransaction eth_getBlockByNumber eth_getBlockByHash eth_chainId eth_getTransactionReceipt eth_gasPrice eth_maxPriorityFeePerGas eth_feeHistory eth_estimateGas eth_getCode eth_getStorageAt eth_call eth_getLogs eth_getBlockTransactionCountByNumber eth_getBlockTransactionCountByHash eth_getTransactionByBlockNumberAndIndex eth_syncing
Web3 & Network (5)
web3_clientVersion web3_sha3 net_version net_peerCount net_listening
Blockchain (8)
tenzro_blockNumber tenzro_getBlock tenzro_getBlockRange tenzro_getTransaction tenzro_sendTransaction tenzro_submitBlock tenzro_getFinalizedBlock tenzro_getTransactionHistory
Accounts (7)
tenzro_createAccount tenzro_createWallet tenzro_getBalance tenzro_getNonce tenzro_listAccounts tenzro_tokenBalance tenzro_totalSupply
OAuth 2.1 / AAP Delegation (8)
tenzro_onboardHuman tenzro_onboardDelegatedAgent tenzro_onboardAutonomousAgent tenzro_exchangeToken tenzro_introspectToken tenzro_oauthDiscovery tenzro_refreshToken tenzro_revokeToken
Onboarding (3)
tenzro_participate tenzro_importIdentity tenzro_joinAsMicroNode
Identity (9)
tenzro_registerIdentity tenzro_registerMachineIdentity tenzro_resolveIdentity tenzro_resolveDidDocument tenzro_listIdentities tenzro_addCredential tenzro_addService tenzro_setUsername tenzro_resolveUsername
Node & Network (7)
tenzro_nodeInfo tenzro_peerCount tenzro_syncing tenzro_getHardwareProfile tenzro_setRole tenzro_exportConfig tenzro_shutdown
Models & Inference (14)
tenzro_listModels tenzro_inferenceRequest tenzro_chat tenzro_chatStream tenzro_downloadModel tenzro_getDownloadProgress tenzro_serveModel tenzro_stopModel tenzro_deleteModel tenzro_listModelEndpoints tenzro_getModelEndpoint tenzro_registerModelEndpoint tenzro_unregisterModelEndpoint tenzro_discoverModels
Forecast / Timeseries (5)
tenzro_listForecastCatalog tenzro_loadForecastModel tenzro_unloadForecastModel tenzro_listForecastModels tenzro_forecast
Vision / Image Embeddings (6)
tenzro_listVisionCatalog tenzro_loadVisionModel tenzro_unloadVisionModel tenzro_listVisionModels tenzro_imageEmbed tenzro_imageTextSimilarity
Text Embeddings (5)
tenzro_listTextEmbeddingCatalog tenzro_loadTextEmbeddingModel tenzro_unloadTextEmbeddingModel tenzro_listTextEmbeddingModels tenzro_textEmbed
Segmentation (5)
tenzro_listSegmentationCatalog tenzro_loadSegmentationModel tenzro_unloadSegmentationModel tenzro_listSegmentationModels tenzro_segment
Detection (5)
tenzro_listDetectionCatalog tenzro_loadDetectionModel tenzro_unloadDetectionModel tenzro_listDetectionModels tenzro_detect
Audio / ASR (5)
tenzro_listAudioCatalog tenzro_loadAudioModel tenzro_unloadAudioModel tenzro_listAudioModels tenzro_transcribe
Video (5)
tenzro_listVideoCatalog tenzro_loadVideoModel tenzro_unloadVideoModel tenzro_listVideoModels tenzro_videoEmbed
Provider (9)
tenzro_registerProvider tenzro_providerStats tenzro_listProviders tenzro_setProviderSchedule tenzro_getProviderSchedule tenzro_setProviderPricing tenzro_getProviderPricing tenzro_addResource tenzro_faucet
Payments (8)
tenzro_createPaymentChallenge tenzro_payMpp tenzro_payX402 tenzro_payVisaTap tenzro_payMastercard tenzro_listPaymentSessions tenzro_paymentGatewayInfo tenzro_getPaymentReceipt
Staking & Governance (7)
tenzro_stake tenzro_unstake tenzro_getVotingPower tenzro_listProposals tenzro_createProposal tenzro_vote tenzro_delegateVotingPower
Agents (14)
tenzro_registerAgent tenzro_listAgents tenzro_sendAgentMessage tenzro_spawnAgent tenzro_runAgentTask tenzro_createSwarm tenzro_getSwarmStatus tenzro_terminateSwarm tenzro_delegateTask tenzro_discoverAgents tenzro_spawnAgentWithSkill tenzro_fundAgent tenzro_swapToken tenzro_agentPayForInference
Task Marketplace (8)
tenzro_postTask tenzro_listTasks tenzro_getTask tenzro_cancelTask tenzro_quoteTask tenzro_assignTask tenzro_completeTask tenzro_updateTask
Agent Marketplace (7)
tenzro_registerAgentTemplate tenzro_listAgentTemplates tenzro_getAgentTemplate tenzro_downloadAgentTemplate tenzro_updateAgentTemplate tenzro_spawnAgentTemplate tenzro_runAgentTemplate
Skills Registry (6)
tenzro_registerSkill tenzro_listSkills tenzro_searchSkills tenzro_useSkill tenzro_getSkill tenzro_updateSkill
Tools Registry (6)
tenzro_registerTool tenzro_listTools tenzro_searchTools tenzro_useTool tenzro_getTool tenzro_updateTool
Token Registry (7)
tenzro_createToken tenzro_getToken tenzro_listTokens tenzro_crossVmTransfer tenzro_wrapTnzo tenzro_getTokenBalance tenzro_deployContract
Settlement & Escrow (7)
tenzro_settle tenzro_getSettlement tenzro_getEscrow tenzro_listEscrowsByPayer tenzro_listEscrowsByPayee tenzro_openPaymentChannel tenzro_closePaymentChannel
Escrow writes go through tenzro_signAndSendTransaction with tx_type = CreateEscrow / ReleaseEscrow / RefundEscrow.
Canton/DAML (3)
tenzro_listCantonDomains tenzro_listDamlContracts tenzro_submitDamlCommand
Events & Streaming (7)
eth_subscribe eth_unsubscribe eth_getLogs tenzro_getEvents tenzro_subscribeEvents tenzro_subscribeEventsStream tenzro_registerWebhook
NFT Operations (5)
tenzro_createNftCollection tenzro_mintNft tenzro_transferNft tenzro_listNftCollections tenzro_registerNftPointer
Bridge Operations (5)
tenzro_bridgeQuote tenzro_bridgeTokens tenzro_getBridgeRoutes tenzro_listBridgeAdapters tenzro_bridgeWithHook
ERC-7802 Cross-Chain (3)
tenzro_crosschainMint tenzro_crosschainBurn tenzro_authorizeCrosschainBridge
ERC-3643 Compliance (3)
tenzro_registerCompliance tenzro_checkCompliance tenzro_freezeAddress