Tenzro Testnet is live —request testnet TNZO

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.

MethodDescription
eth_blockNumberReturns the current block number
eth_getBalanceReturns balance of an account (params: address, block)
eth_getTransactionCountReturns account nonce (params: address, block)
eth_sendRawTransactionSubmits a signed transaction (params: signed tx hex)
eth_getBlockByNumberReturns block by number (params: number, full txs bool)
eth_getBlockByHashReturns block by hash (params: hash, full txs bool)
eth_chainIdReturns the chain ID (default: 1337)
eth_getTransactionReceiptReturns transaction receipt (params: tx hash)
eth_gasPriceReturns 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_maxPriorityFeePerGasReturns 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_feeHistoryReturns 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_estimateGasEstimates gas for a transaction (params: tx object)
eth_getCodeReturns contract bytecode (params: address, block)
eth_getStorageAtReturns storage value (params: address, slot, block)
eth_callExecutes a call without creating a transaction (params: tx object, block)
eth_getLogsReturns logs matching a filter (params: filter object)
eth_getBlockTransactionCountByNumberReturns tx count in a block by number
eth_getBlockTransactionCountByHashReturns tx count in a block by hash
eth_getTransactionByBlockNumberAndIndexReturns tx by block number and index
eth_syncingReturns 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.

Request:
{
  "jsonrpc": "2.0",
  "method": "eth_blockNumber",
  "params": [],
  "id": 1
}
Response:
{
  "jsonrpc": "2.0",
  "result": "0x4b7",
  "id": 1
}

eth_getBalance

Returns the TNZO balance of an account in wei.

Parameters:
  • addressAccount address (hex)
  • blockBlock number or "latest"
Request:
{
  "jsonrpc": "2.0",
  "method": "eth_getBalance",
  "params": ["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5", "latest"],
  "id": 1
}
Response:
{
  "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.

Parameters:
  • txTransaction 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
Request:
{
  "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
}
Response:
{
  "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.

Parameters:
  • messageHex-encoded message bytes
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_signMessage",
  "params": [{ "message": "0xdeadbeef" }],
  "id": 1
}
Response:
{
  "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.

Parameters:
  • fromSender address
  • toRecipient address
  • valueAmount (decimal or hex wei)
  • nonceAccount nonce
  • chain_idChain ID (default 1337)
  • tx_typeOptional typed payload (Transfer, CreateEscrow, ReleaseEscrow, RefundEscrow, ...) — defaults to Transfer { amount: value }
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_signTransaction",
  "params": [{
    "from": "0x...",
    "to": "0x...",
    "value": 1000000000000000000,
    "nonce": 0,
    "chain_id": 1337
  }],
  "id": 1
}
Response:
{
  "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.

Parameters:
  • fromSender address
  • toRecipient address
  • valueAmount (decimal or hex wei)
  • nonceAccount nonce
  • chain_idChain ID (default 1337)
  • tx_typeOptional typed payload (Transfer, CreateEscrow, ReleaseEscrow, RefundEscrow, ...) — defaults to Transfer { amount: value }
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_signAndSendTransaction",
  "params": [{
    "from": "0x...",
    "to": "0x...",
    "value": 1000000000000000000,
    "nonce": 0,
    "chain_id": 1337
  }],
  "id": 1
}
Response:
{
  "jsonrpc": "2.0",
  "result": "0x1234567890abcdef...",
  "id": 1
}

eth_getTransactionReceipt

Returns the receipt of a transaction by transaction hash.

Parameters:
  • hashTransaction hash
Response:
{
  "jsonrpc": "2.0",
  "result": {
    "transactionHash": "0x1234567890abcdef...",
    "blockNumber": "0x4b7",
    "gasUsed": "0x5208",
    "status": "0x1"
  },
  "id": 1
}

Web3 & Network Methods

MethodDescription
web3_clientVersionReturns the Tenzro node client version string
web3_sha3Returns Keccak-256 hash of given data (params: data hex)
net_versionReturns the current network ID
net_peerCountReturns number of connected peers
net_listeningReturns true if the node is listening for connections

Tenzro Blockchain Methods

Block & Transaction

tenzro_blockNumber

Returns the current block height.

Response:
{
  "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.

Parameters:
  • heightBlock height number
Response:
{
  "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).

Parameters:
  • startHeightFirst block height to return (inclusive)
  • endHeightLast block height to return (inclusive, clamped)
  • maxResultsOptional batch size (default 64, max 256)
Response:
{
  "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.

Parameters:
  • hashTransaction hash (hex)
Response:
{
  "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).

Parameters:
  • fromSender address
  • toRecipient address
  • valueAmount in wei
  • dataOptional calldata (hex)
Response:
{
  "jsonrpc": "2.0",
  "result": { "transaction_hash": "0xabc123..." },
  "id": 1
}

tenzro_submitBlock

Submit a new block for validation (validator nodes only).

Parameters:
  • blockBlock data object
Response:
{
  "jsonrpc": "2.0",
  "result": { "accepted": true, "height": 1208 },
  "id": 1
}

tenzro_getFinalizedBlock

Returns the latest finalized block height.

Response:
{
  "jsonrpc": "2.0",
  "result": { "finalized_height": 1200 },
  "id": 1
}

tenzro_getTransactionHistory

Returns transaction history for an address.

Parameters:
  • addressAccount address
  • limitMax results (optional, default 50)
Response:
{
  "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.

Parameters:
  • thresholdThreshold (e.g., 2 for 2-of-3)
  • total_sharesTotal shares (e.g., 3)
Response:
{
  "jsonrpc": "2.0",
  "result": {
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5",
    "threshold": 2,
    "total_shares": 3
  },
  "id": 1
}

tenzro_createWallet

Creates a new keypair wallet (Ed25519 or Secp256k1).

Parameters:
  • key_type"ed25519" or "secp256k1"
Response:
{
  "jsonrpc": "2.0",
  "result": {
    "address": "0x8Ba1f109551bD432803012645Ac136ddd64DBA72",
    "key_type": "ed25519"
  },
  "id": 1
}

tenzro_getBalance

Returns TNZO balance for an address.

Parameters:
  • addressAccount address (hex)
Response:
{
  "jsonrpc": "2.0",
  "result": { "balance": "1000.0", "address": "0x742d35Cc..." },
  "id": 1
}

tenzro_getNonce

Returns the current nonce for an address.

Parameters:
  • addressAccount address
Response:
{
  "jsonrpc": "2.0",
  "result": { "nonce": 42 },
  "id": 1
}

tenzro_listAccounts

Lists all accounts managed by this node.

Response:
{
  "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.

Parameters:
  • addressAccount address
  • token_idToken identifier (optional, defaults to TNZO)
Response:
{
  "jsonrpc": "2.0",
  "result": { "balance": "1000.0", "token": "TNZO" },
  "id": 1
}

tenzro_totalSupply

Returns total TNZO token supply.

Response:
{
  "jsonrpc": "2.0",
  "result": { "total_supply": "1000000000.0" },
  "id": 1
}

tenzro_faucet

Request testnet TNZO tokens (100 TNZO per request, 24h cooldown).

Parameters:
  • addressRecipient address
Response:
{
  "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.

Parameters:
  • display_nameDisplay name for the identity
  • holder_pubkeyHex-encoded Ed25519 holder public key (DPoP key)
  • rarArray of RAR grants (RFC 9396 authorization_details)
  • aap_capabilitiesArray of AAP capability strings (e.g., ['inference', 'transfer'])
Response:
{
  "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.

Parameters:
  • controller_didDID of the human controller
  • holder_pubkeyHex-encoded Ed25519 holder public key
  • capabilitiesArray of capability strings
  • rarRAR grants (subset of controller's grants)
  • aap_capabilitiesAAP 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.

Parameters:
  • display_nameDisplay name for the agent
  • holder_pubkeyHex-encoded Ed25519 holder public key
  • capabilitiesArray of capability strings
  • rarRAR grants
  • aap_capabilitiesAAP 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.

Parameters:
  • subject_tokenParent JWT to derive from
  • child_bearer_didDID that will hold the child token
  • child_dpop_jktDPoP key thumbprint (JWK SHA-256) for the child holder
  • requested_rarSubset of parent RAR grants the child should receive
  • requested_aap_capabilitiesSubset of parent AAP capabilities
  • requested_ttl_secsRequested lifetime (clamped to AS max_ttl_secs)
Request:
{
  "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
}
Response:
{
  "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
}
Note: Child grants must be a strict subset of parent grants. Subset enforcement covers RAR types, max amounts, allowed contracts, and AAP capabilities. The grant_type for this method is the URN urn:ietf:params:oauth:grant-type:token-exchange when called via the standard OAuth /token endpoint.

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.

Parameters:
  • tokenJWT to introspect
Response:
{
  "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.

Response:
{
  "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.

Parameters:
  • refresh_tokenRefresh 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.

Parameters:
  • tokenJWT to revoke
Response:
{
  "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.

Parameters:
  • display_nameDisplay name for the identity
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_participate",
  "params": [{ "display_name": "Alice" }],
  "id": 1
}
Response:
{
  "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.

Parameters:
  • private_keyHex-encoded private key (with or without 0x prefix)
  • key_type"ed25519" or "secp256k1"
  • display_nameDisplay name for the identity
  • passwordPassword for encrypting wallet key shares
Response:
{
  "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.

Parameters:
  • display_nameDisplay name for the identity
Response:
{
  "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).

Parameters:
  • identity_type"human"
  • display_nameDisplay name
Response:
{
  "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.

Parameters:
  • controller_didController DID (human or autonomous)
  • capabilitiesArray of capability strings
  • delegation_scopeOptional delegation scope object
Response:
{
  "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.

Parameters:
  • didDID to resolve (e.g., "did:tenzro:human:...")
Response:
{
  "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.

Parameters:
  • didDID to resolve
Response:
{
  "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.

Response:
{
  "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.

Parameters:
  • didDID to add credential to
  • credential_typeCredential type (e.g., KycAttestation)
  • issuerIssuer DID
  • claimsClaims object
Response:
{
  "jsonrpc": "2.0",
  "result": { "credential_id": "cred_abc123", "status": "issued" },
  "id": 1
}

tenzro_addService

Add a service endpoint to a DID Document.

Parameters:
  • didDID to add service to
  • service_typeService type (e.g., MCP, A2A, LinkedDomains)
  • endpointService endpoint URL
Response:
{
  "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.

Parameters:
  • didDID to set the username for
  • usernameDesired username (e.g., alice, bob_42)
Response:
{
  "jsonrpc": "2.0",
  "result": { "username": "alice", "did": "did:tenzro:human:abc..." },
  "id": 1
}

tenzro_resolveUsername

Resolve a username to its associated DID.

Parameters:
  • usernameUsername to resolve
Response:
{
  "jsonrpc": "2.0",
  "result": { "username": "alice", "did": "did:tenzro:human:abc..." },
  "id": 1
}

Network & Node Methods

tenzro_nodeInfo

Returns information about the node.

Response:
{
  "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.

Response:
{
  "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.

Response:
{
  "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).

Response:
{
  "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.

Parameters:
  • role"validator", "provider", "tee-provider", or "user"
Response:
{
  "jsonrpc": "2.0",
  "result": { "role": "provider", "status": "active" },
  "id": 1
}

tenzro_exportConfig

Export the current node configuration.

Response:
{
  "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).

Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "shutting_down" },
  "id": 1
}

Model & Inference Methods

tenzro_listModels

List available AI models on the network.

Parameters:
  • categoryFilter by category (e.g., "llm", "vision") — optional
  • modalityFilter by modality (e.g., "text", "image") — optional
Response:
{
  "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.

Parameters:
  • model_idModel identifier
  • inputRaw prompt text (no chat template applied)
  • strategyRouting strategy: Cheapest, LowestLatency, HighestReputation, Weighted (optional)
  • max_tokensMaximum tokens to generate (optional)
Request:
{
  "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
}
Response:
{
  "jsonrpc": "2.0",
  "result": {
    "request_id": "req_abc123",
    "status": "pending",
    "estimated_cost": "0.05 TNZO"
  },
  "id": 1
}
Note: Params is a flat JSON object (not an array of arguments). Does NOT apply chat templates — use tenzro_chat for proper chat formatting. The /no_think suffix for thinking models only works with tenzro_chat.

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).

Parameters:
  • model_idModel identifier
  • messageChat message text (string, not array)
  • max_tokensMaximum tokens (optional)
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_chat",
  "params": [{
    "model_id": "qwen3.5-0.8b",
    "message": "Write a hello world function",
    "max_tokens": 200
  }],
  "id": 1
}
Response:
{
  "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
}
Note: Two first-class request shapes: simple (message: string, shown above) and rich (messages: array of role/content turns with text, image, tool_use, and tool_result content blocks, plus optional system, tools, and reasoning_effort fields). Presence of "messages" selects the rich shape; presence of "message" selects the simple shape. The rich shape supports multi-turn agents, tool calling, vision input, and structured assistant responses; both shapes preserve their wire format across network forwarding. SSE streaming is exposed via tenzro_chatStream (event grammar matches the chosen shape). For thinking models (Qwen 3, Qwen 3.5, DeepSeek), append /no_think to the message (simple shape) or set reasoning_effort: "low" (rich shape) to suppress chain-of-thought. Full spec: docs/chat-api.md.

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.

Parameters:
  • model_idModel identifier or HuggingFace repo
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_downloadModel",
  "params": [{ "model_id": "gemma4-9b" }],
  "id": 1
}
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "downloading", "model_id": "gemma4-9b" },
  "id": 1
}
Note: Downloads GGUF files directly from HuggingFace via HTTP (not the hf-hub crate). Progress is tracked with percentage updates via tenzro_getDownloadProgress.

tenzro_getDownloadProgress

Check download progress for a model. Includes percentage updates and an error field on failure.

Parameters:
  • model_idModel identifier
Response:
// 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
}
Note: The error field is only present when status is "failed" and contains the actual error message from the download attempt.

tenzro_serveModel

Start serving a model for inference requests.

Parameters:
  • model_idModel to serve
  • price_per_tokenPrice per token in TNZO (optional)
Response:
{
  "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.

Parameters:
  • model_idModel to stop
Response:
{
  "jsonrpc": "2.0",
  "result": { "model_id": "gemma4-9b", "status": "stopped" },
  "id": 1
}
Note: The node gracefully waits for any in-flight inference requests to finish before unloading the model, preventing out-of-memory errors when switching between models.

tenzro_deleteModel

Delete a downloaded model from local storage.

Parameters:
  • model_idModel to delete
Response:
{
  "jsonrpc": "2.0",
  "result": { "model_id": "gemma4-9b", "deleted": true },
  "id": 1
}

tenzro_listModelEndpoints

List active model service endpoints with API and MCP URLs.

Response:
{
  "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.

Parameters:
  • endpoint_idEndpoint identifier
Response:
{
  "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.

Parameters:
  • model_idModel being served
  • api_urlAPI endpoint URL
  • mcp_urlMCP endpoint URL (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "endpoint_id": "ep_abc123", "status": "registered" },
  "id": 1
}

tenzro_unregisterModelEndpoint

Remove a model service endpoint from the registry.

Parameters:
  • endpoint_idEndpoint identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "unregistered" },
  "id": 1
}

tenzro_discoverModels

Discover models available on the network with filtering.

Parameters:
  • querySearch query (optional)
  • categoryCategory filter (optional)
Response:
{
  "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.

Parameters:
  • model_idStable identifier used for subsequent calls
  • hf_repoHuggingFace repo, e.g. "tenzro/timeseries-onnx"
  • hf_filenameONNX file path within the repo, e.g. "chronos-bolt-base.onnx"
  • context_lengthMaximum input history length (e.g. 512)
  • max_horizonMaximum forecast horizon (e.g. 64)
  • n_quantilesNumber of quantile outputs, or 0 for point forecasts
Request:
{
  "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
}
Response:
{
  "jsonrpc": "2.0",
  "result": { "model_id": "chronos-bolt-base", "status": "loaded" },
  "id": 1
}
Note: Input shape is [1, context_len]; output shape is [1, H] for point forecasts or [1, H, Q] when n_quantiles > 0.

tenzro_unloadForecastModel

Unload a previously loaded forecast model and free its ORT session.

Parameters:
  • model_idIdentifier passed to tenzro_loadForecastModel
Response:
{
  "jsonrpc": "2.0",
  "result": { "model_id": "chronos-bolt-base", "status": "unloaded" },
  "id": 1
}

tenzro_listForecastModels

List all currently loaded forecast models.

Response:
{
  "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.

Parameters:
  • model_idIdentifier of a loaded forecast model
  • historyInput series as a flat array of f32 values, length ≤ context_length
  • horizonForecast horizon (optional; defaults to max_horizon)
  • num_samplesNumber of probabilistic samples (optional; model-dependent)
Request:
{
  "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
}
Response:
{
  "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
}
Note: quantiles is omitted for point-forecast models. Inference dispatches via spawn_blocking; ORT sessions are guarded by a parking_lot mutex (ORT Sessions are not Send-safe across concurrent calls).

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.

Response:
{
  "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
}
Note: All seven entries are ungated and directly downloadable. Use the catalog id with the catalog_id shortcut on tenzro_loadVisionModel.

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.

Parameters:
  • catalog_idCatalog identifier (e.g. clip-vit-b32) — shortcut form
  • model_idStable identifier — explicit form
  • hf_repoHuggingFace repo — explicit form
  • hf_filenameONNX file path within the repo — explicit form
  • input_sizeSquare input edge length (e.g. 224) — explicit form
  • embedding_dimOutput embedding dimension — explicit form
  • normalizationOne of "clip", "imagenet", "siglip" — explicit form
Request:
// 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
}
Response:
{
  "jsonrpc": "2.0",
  "result": { "model_id": "clip-vit-b32", "status": "loaded" },
  "id": 1
}

tenzro_unloadVisionModel

Unload a previously loaded vision model.

Parameters:
  • model_idIdentifier passed to tenzro_loadVisionModel
Response:
{
  "jsonrpc": "2.0",
  "result": { "model_id": "clip-vit-b32", "status": "unloaded" },
  "id": 1
}

tenzro_listVisionModels

List all currently loaded vision encoders.

Response:
{
  "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.

Parameters:
  • model_idIdentifier of a loaded vision model
  • image_base64Base64-encoded image bytes (PNG, JPEG, or WebP)
  • normalizeIf true, L2-normalize the output embedding (optional, default false)
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_imageEmbed",
  "params": [{
    "model_id": "clip-vit-b32",
    "image_base64": "iVBORw0KGgo...",
    "normalize": true
  }],
  "id": 1
}
Response:
{
  "jsonrpc": "2.0",
  "result": {
    "model_id": "clip-vit-b32",
    "embedding": [0.014, -0.082, 0.123, ...],
    "embedding_dim": 512
  },
  "id": 1
}
Note: The runtime accepts both [1, D] and [1, 1, D] output shapes from the underlying ONNX session and flattens to [D].

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.

Parameters:
  • image_embeddingImage embedding vector (array of f32)
  • text_embeddingText embedding vector (array of f32, same dimension)
Request:
{
  "jsonrpc": "2.0",
  "method": "tenzro_imageTextSimilarity",
  "params": [{
    "image_embedding": [0.014, -0.082, ...],
    "text_embedding": [0.021, -0.075, ...]
  }],
  "id": 1
}
Response:
{
  "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.

Response:
{
  "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.

Parameters:
  • model_idIdentifier of a loaded text encoder
  • inputsArray of strings to encode
  • dimensionOptional Matryoshka truncation dim (must be supported by the model)
  • normalizeIf true, L2-normalize after truncation (default true)
Request:
{
  "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
}
Response:
{
  "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.

Parameters:
  • model_idIdentifier of a loaded segmentation model
  • image_base64Base64-encoded PNG / JPEG / WebP
  • promptsArray of SegmentPrompt — { type: 'point' | 'box', x?, y?, label?, x0?, y0?, x1?, y1? }
Request:
{
  "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
}
Response:
{
  "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.

Parameters:
  • model_idIdentifier of a loaded detection model
  • image_base64Base64-encoded PNG / JPEG / WebP
  • score_thresholdMinimum confidence (default 0.3)
Response:
{
  "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.

Parameters:
  • model_idIdentifier of a loaded ASR model
  • audio_base64Base64-encoded audio bytes
  • languageOptional ISO-639-1 hint (Whisper / Canary multilingual)
Response:
{
  "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.

Parameters:
  • model_idIdentifier of a loaded vision encoder used for frame embedding
  • video_base64Base64-encoded video bytes (any container ffmpeg can decode)
  • framesNumber of evenly-spaced frames to sample (default 8)
Response:
{
  "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).

Parameters:
  • provider_type"validator", "inference", or "tee"
  • stake_amountAmount of TNZO to stake (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "provider_id": "prov_abc123", "status": "registered" },
  "id": 1
}

tenzro_providerStats

Get provider statistics: served models, inferences, staking totals.

Parameters:
  • provider_idProvider identifier (optional, defaults to self)
Response:
{
  "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.

Response:
{
  "jsonrpc": "2.0",
  "result": [
    { "provider_id": "prov_abc123", "type": "inference", "models": 3, "status": "active" }
  ],
  "id": 1
}

tenzro_setProviderSchedule

Set provider availability schedule.

Parameters:
  • scheduleSchedule object with days and hours
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "schedule_set" },
  "id": 1
}

tenzro_getProviderSchedule

Get the current provider availability schedule.

Response:
{
  "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.

Parameters:
  • model_idModel to set pricing for
  • price_per_tokenPrice per token in TNZO
Response:
{
  "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.

Response:
{
  "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.

Parameters:
  • resource_type"gpu", "cpu", or "storage"
  • detailsResource details object
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "resource_added" },
  "id": 1
}

Payment Methods

tenzro_createPaymentChallenge

Create an HTTP 402 payment challenge for a resource.

Parameters:
  • resourceResource URL or identifier
  • amountAmount in TNZO
  • protocol"mpp", "x402", or "native"
Response:
{
  "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).

Parameters:
  • challenge_idChallenge ID from createPaymentChallenge
  • wallet_addressPayer wallet address
Response:
{
  "jsonrpc": "2.0",
  "result": { "receipt_id": "rcpt_def456", "status": "paid", "transaction_hash": "0xabc123..." },
  "id": 1
}

tenzro_payX402

Pay using x402 (Coinbase HTTP 402 protocol).

Parameters:
  • challenge_idChallenge ID
  • wallet_addressPayer wallet address
Response:
{
  "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.

Parameters:
  • challenge_idChallenge ID
  • agent_didAgent DID for authorization
Response:
{
  "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.

Parameters:
  • challenge_idChallenge ID
  • agent_didAgent DID for authorization
Response:
{
  "jsonrpc": "2.0",
  "result": { "receipt_id": "rcpt_mc001", "status": "paid", "rail": "mastercard_agent_pay" },
  "id": 1
}

tenzro_listPaymentSessions

List active payment sessions.

Response:
{
  "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.

Response:
{
  "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.

Parameters:
  • receipt_idReceipt identifier
Response:
{
  "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.

Parameters:
  • amountAmount of TNZO to stake
  • provider_type"validator", "inference", or "tee"
  • lock_daysLock period in days (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "stake_id": "stake_abc123", "transaction_hash": "0xdef456...", "status": "staked" },
  "id": 1
}

tenzro_unstake

Withdraw staked tokens (7-day unbonding period).

Parameters:
  • amountAmount to unstake
  • forceForce immediate unstake with penalty (optional)
Response:
{
  "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.

Parameters:
  • addressAddress to check
Response:
{
  "jsonrpc": "2.0",
  "result": { "total_staked": "1000.0", "rewards": "25.5", "apy": "12.5%" },
  "id": 1
}

Governance Methods

tenzro_listProposals

List all governance proposals.

Response:
{
  "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.

Parameters:
  • titleProposal title
  • descriptionDetailed description
  • proposal_type"parameter", "treasury", "upgrade", or "emergency"
Response:
{
  "jsonrpc": "2.0",
  "result": { "proposal_id": "prop_002", "status": "created" },
  "id": 1
}

tenzro_vote

Vote on a governance proposal.

Parameters:
  • proposal_idProposal identifier
  • vote"For", "Against", or "Abstain"
  • justificationOptional voting justification
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "vote_recorded" },
  "id": 1
}

tenzro_delegateVotingPower

Delegate voting power to another address.

Parameters:
  • delegatorDelegating address
  • delegateeReceiving address
  • amountAmount of voting power
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "delegated" },
  "id": 1
}

Agent Methods

tenzro_registerAgent

Register an AI agent on the network with capabilities.

Parameters:
  • nameAgent name
  • capabilitiesArray of capability strings
Response:
{
  "jsonrpc": "2.0",
  "result": { "agent_id": "agent_xyz789", "did": "did:tenzro:machine:...", "status": "active" },
  "id": 1
}

tenzro_listAgents

List all registered agents.

Response:
{
  "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.

Parameters:
  • agent_idTarget agent identifier
  • messageMessage content
  • task_typeTask type classification (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "task_id": "task_jkl456", "status": "queued" },
  "id": 1
}

tenzro_spawnAgent

Spawn a new autonomous agent instance.

Parameters:
  • nameAgent name
  • capabilitiesCapabilities array
  • configAgent configuration object (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "agent_id": "agent_new123", "status": "spawned" },
  "id": 1
}

tenzro_runAgentTask

Execute a task on an existing agent.

Parameters:
  • agent_idAgent identifier
  • taskTask description
  • inputInput data
Response:
{
  "jsonrpc": "2.0",
  "result": { "task_id": "task_run123", "status": "running" },
  "id": 1
}

tenzro_createSwarm

Create a multi-agent swarm for complex tasks.

Parameters:
  • nameSwarm name
  • agentsArray of agent IDs
  • coordinatorCoordinator agent ID
Response:
{
  "jsonrpc": "2.0",
  "result": { "swarm_id": "swarm_abc", "agents": 3, "status": "active" },
  "id": 1
}

tenzro_getSwarmStatus

Get status of a multi-agent swarm.

Parameters:
  • swarm_idSwarm identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "swarm_id": "swarm_abc", "agents": 3, "tasks_completed": 12, "status": "active" },
  "id": 1
}

tenzro_terminateSwarm

Terminate a multi-agent swarm.

Parameters:
  • swarm_idSwarm identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "terminated" },
  "id": 1
}

tenzro_delegateTask

Delegate a task from one agent to another.

Parameters:
  • from_agentSource agent ID
  • to_agentTarget agent ID
  • taskTask description
Response:
{
  "jsonrpc": "2.0",
  "result": { "delegation_id": "del_abc", "status": "delegated" },
  "id": 1
}

tenzro_discoverAgents

Discover agents on the network by capability.

Parameters:
  • capabilityRequired capability (optional)
Response:
{
  "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.

Parameters:
  • skill_idSkill identifier
  • configAgent configuration (optional)
Response:
{
  "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.

Parameters:
  • agent_idAgent identifier
  • amountAmount in TNZO
Response:
{
  "jsonrpc": "2.0",
  "result": { "transaction_hash": "0xabc...", "new_balance": "100.0" },
  "id": 1
}

tenzro_swapToken

Swap tokens on behalf of an agent.

Parameters:
  • agent_idAgent identifier
  • from_tokenSource token
  • to_tokenTarget token
  • amountAmount to swap
Response:
{
  "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.

Parameters:
  • agent_idAgent identifier
  • model_idModel to pay for
  • amountAmount in TNZO
Response:
{
  "jsonrpc": "2.0",
  "result": { "payment_id": "pay_abc", "status": "paid" },
  "id": 1
}

Task Marketplace Methods

tenzro_postTask

Post a new task to the marketplace.

Parameters:
  • titleTask title
  • descriptionTask description
  • budgetMaximum budget in TNZO
  • requirementsRequired capabilities (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "task_id": "task_mkt_001", "status": "open" },
  "id": 1
}

tenzro_listTasks

List tasks in the marketplace.

Parameters:
  • statusFilter by status: "open", "assigned", "completed" (optional)
Response:
{
  "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.

Parameters:
  • task_idTask identifier
Response:
{
  "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.

Parameters:
  • task_idTask identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "cancelled" },
  "id": 1
}

tenzro_quoteTask

Submit a quote for an open task.

Parameters:
  • task_idTask identifier
  • priceQuoted price in TNZO
  • estimated_timeEstimated completion time
Response:
{
  "jsonrpc": "2.0",
  "result": { "quote_id": "quote_abc", "status": "submitted" },
  "id": 1
}

tenzro_assignTask

Assign a task to a quoted provider.

Parameters:
  • task_idTask identifier
  • quote_idAccepted quote ID
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "assigned" },
  "id": 1
}

tenzro_completeTask

Mark a task as completed with result.

Parameters:
  • task_idTask identifier
  • resultTask result data
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "completed", "settlement_hash": "0xabc..." },
  "id": 1
}

tenzro_updateTask

Update task details or status.

Parameters:
  • task_idTask identifier
  • updatesFields to update
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "updated" },
  "id": 1
}

Agent Marketplace Methods

tenzro_registerAgentTemplate

Register an agent template in the marketplace.

Parameters:
  • nameTemplate name
  • descriptionTemplate description
  • capabilitiesCapabilities array
  • pricePrice to use template (TNZO)
Response:
{
  "jsonrpc": "2.0",
  "result": { "template_id": "tmpl_abc", "status": "registered" },
  "id": 1
}

tenzro_listAgentTemplates

List available agent templates.

Response:
{
  "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.

Parameters:
  • template_idTemplate identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "template_id": "tmpl_abc", "name": "DeFi Trader", "description": "...", "capabilities": [...] },
  "id": 1
}

tenzro_downloadAgentTemplate

Download an agent template for local use.

Parameters:
  • template_idTemplate identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "downloaded", "path": "~/.tenzro/templates/tmpl_abc" },
  "id": 1
}

tenzro_updateAgentTemplate

Update an existing agent template.

Parameters:
  • template_idTemplate identifier
  • updatesFields to update
Response:
{
  "jsonrpc": "2.0",
  "result": { "status": "updated" },
  "id": 1
}

tenzro_spawnAgentTemplate

Spawn an agent from a marketplace template.

Parameters:
  • template_idTemplate identifier
  • configInstance configuration (optional)
Response:
{
  "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.

Parameters:
  • template_idTemplate identifier
  • taskTask to execute
Response:
{
  "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.

Parameters:
  • nameSkill name (e.g., solana-defi)
  • categoryCategory (defi, bridge, oracle, etc.)
  • descriptionSkill description
  • tagsArray of tags
  • mcp_endpointMCP server endpoint (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "skill_id": "skill_abc", "status": "registered" },
  "id": 1
}

tenzro_listSkills

List all registered skills.

Response:
{
  "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.

Parameters:
  • querySearch query
Response:
{
  "jsonrpc": "2.0",
  "result": [
    { "skill_id": "solana-defi", "relevance": 0.95 }
  ],
  "id": 1
}

tenzro_useSkill

Invoke a registered skill.

Parameters:
  • skill_idSkill identifier
  • actionAction to perform
  • paramsAction parameters
Response:
{
  "jsonrpc": "2.0",
  "result": { "execution_id": "exec_abc", "status": "completed", "result": {...} },
  "id": 1
}

tenzro_getSkill

Get details of a specific skill.

Parameters:
  • skill_idSkill identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "skill_id": "solana-defi", "name": "Solana DeFi", "category": "defi", "tools": 14 },
  "id": 1
}

tenzro_updateSkill

Update a registered skill definition.

Parameters:
  • skill_idSkill identifier
  • updatesFields to update
Response:
{
  "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.

Parameters:
  • nameTool name
  • tool_type"mcp", "api", or "cli"
  • endpointTool endpoint URL
  • descriptionTool description
Response:
{
  "jsonrpc": "2.0",
  "result": { "tool_id": "tool_abc", "status": "registered" },
  "id": 1
}

tenzro_listTools

List all registered tools.

Response:
{
  "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.

Parameters:
  • querySearch query
  • typeTool type filter (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": [{ "tool_id": "tenzro-solana-mcp", "relevance": 0.9 }],
  "id": 1
}

tenzro_useTool

Invoke a registered tool.

Parameters:
  • tool_idTool identifier
  • actionAction to perform
  • paramsAction parameters
Response:
{
  "jsonrpc": "2.0",
  "result": { "execution_id": "exec_tool_abc", "status": "completed", "result": {...} },
  "id": 1
}

tenzro_getTool

Get details of a specific tool.

Parameters:
  • tool_idTool identifier
Response:
{
  "jsonrpc": "2.0",
  "result": { "tool_id": "tenzro-solana-mcp", "type": "mcp", "endpoint": "/mcp (port 3003)" },
  "id": 1
}

tenzro_updateTool

Update a registered tool definition.

Parameters:
  • tool_idTool identifier
  • updatesFields to update
Response:
{
  "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.

Parameters:
  • nameToken name
  • symbolToken symbol
  • decimalsDecimal places (default 18)
  • initial_supplyInitial supply to mint
Response:
{
  "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.

Parameters:
  • identifierToken symbol, EVM address, or token ID
Response:
{
  "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.

Parameters:
  • vm_type"evm", "svm", or "daml" (optional)
Response:
{
  "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).

Parameters:
  • token_idToken identifier
  • from_vmSource VM type
  • to_vmTarget VM type
  • amountAmount to transfer
  • recipientRecipient address on target VM
Response:
{
  "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).

Parameters:
  • amountAmount to wrap
  • target_vm"evm", "svm", or "daml"
Response:
{
  "jsonrpc": "2.0",
  "result": { "wrapped_amount": "100.0", "vm": "evm", "contract": "0x7a4bcb13..." },
  "id": 1
}
Note: In the pointer model, wrapping is a no-op — all VM representations share the same underlying balance.

tenzro_getTokenBalance

Get TNZO balance across all VMs with decimal conversion.

Parameters:
  • addressAccount address
Response:
{
  "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.

Parameters:
  • vm_type"evm", "svm", or "daml"
  • bytecodeContract bytecode (hex)
  • constructor_argsConstructor arguments (optional)
Response:
{
  "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.

Parameters:
  • payerPayer address
  • payeePayee address
  • amountSettlement amount in TNZO
  • proofSettlement proof (optional)
Response:
{
  "jsonrpc": "2.0",
  "result": { "settlement_id": "settle_abc", "transaction_hash": "0xdef...", "status": "settled" },
  "id": 1
}

tenzro_getSettlement

Get details of a settlement by ID.

Parameters:
  • settlement_idSettlement identifier
Response:
{
  "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.

Parameters:
  • fromPayer address (must equal the DID's bound MPC wallet)
  • toPayee address (CreateEscrow) or any address (Release/Refund)
  • valueAlways 0 (the amount lives in tx_type.data)
  • gas_limit75000 / 60000 / 50000 for Create / Release / Refund
  • gas_priceWei per gas (e.g. 1000000000)
  • nonceSender nonce
  • chain_idChain id
  • tx_type{ type: 'CreateEscrow' | 'ReleaseEscrow' | 'RefundEscrow', data: { ... } }
Response:
{
  "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).

Parameters:
  • escrow_idHex escrow identifier (derived from payer + nonce)
Response:
{
  "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.

Parameters:
  • payerPayer address
Response:
{
  "jsonrpc": "2.0",
  "result": ["0x...", "0x..."],
  "id": 1
}

tenzro_listEscrowsByPayee

List all escrow ids for a given payee address.

Parameters:
  • payeePayee address
Response:
{
  "jsonrpc": "2.0",
  "result": ["0x...", "0x..."],
  "id": 1
}

tenzro_openPaymentChannel

Open a micropayment channel for off-chain per-token billing.

Parameters:
  • counterpartyCounterparty address
  • depositInitial deposit amount
Response:
{
  "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.

Parameters:
  • channel_idChannel identifier
Response:
{
  "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.

Parameters:
  • dispute_idDispute identifier (returned when the dispute was opened)
Response:
{
  "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.

Parameters:
  • channel_idChannel identifier to list disputes for
Response:
{
  "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.

Parameters:
  • content_hashSHA-256 hex of the inference output bytes (0x-prefix optional)
Response:
{
  "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).

Parameters:
  • providerProvider address (hex, 0x-prefix optional)
Response:
{
  "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.

Response:
{
  "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.

Parameters:
  • vdcAP2 VDC object (intent or cart mandate JSON)
Response:
{
  "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.

Parameters:
  • intent_vdcIntent mandate VDC (signed by principal)
  • cart_vdcCart mandate VDC (signed by agent)
Response:
{
  "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.

Response:
{
  "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.

Parameters:
  • template_idTemplate filter (optional)
Response:
{
  "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).

Parameters:
  • command_type"create", "exercise", or "exercise_by_key"
  • template_idTemplate identifier
  • partyParty identifier
Response:
{
  "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

MethodDescription
POST /api/verify/zk-proofVerify Groth16, PlonK, or STARK proof
POST /api/verify/tee-attestationVerify TEE attestation (TDX, SEV-SNP, Nitro, NVIDIA)
POST /api/verify/transactionVerify transaction signature (Ed25519/Secp256k1)
POST /api/verify/settlementVerify settlement receipt
POST /api/verify/inferenceVerify inference result with ZK proof
GET /api/verify/healthHealth check
GET /api/healthHealth check (alias)
GET /api/statusNode status and metrics
POST /api/faucetRequest testnet TNZO (100 per request, 24h cooldown)

POST /api/verify/zk-proof

Verify a zero-knowledge proof with structural validation.

Request:
{
  "proof_type": "groth16",
  "proof_bytes": "0xabc123...",
  "public_inputs": ["0x123", "0x456"],
  "verification_key": "0xdef789..."
}
Response:
{
  "valid": true,
  "details": {
    "proof_type": "groth16",
    "public_inputs_count": 2,
    "proof_size_bytes": 128,
    "status": "verified"
  },
  "verified_at": "2026-04-10T12:00:00Z"
}
Note: Proof types: groth16 (>=128 bytes + public inputs), plonk (>=256 bytes), stark (>=32 bytes)

POST /api/verify/tee-attestation

Verify a TEE attestation report with X.509 certificate chain validation.

Request:
{
  "attestation_data": "0xdef456...",
  "vendor": "intel_tdx",
  "report_data": "0xabcdef..."
}
Response:
{
  "valid": true,
  "details": { "vendor": "intel_tdx", "attestation_size": 64 },
  "verified_at": "2026-04-10T12:00:00Z"
}
Note: Vendors: intel_tdx, amd_sev_snp, aws_nitro, nvidia_gpu

POST /api/verify/transaction

Verify a transaction signature using Ed25519 or Secp256k1.

Request:
{
  "tx_hash": "0x789abc...",
  "sender": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5",
  "signature": "0xdef123...",
  "public_key": "0x0123456789abcdef..."
}
Response:
{
  "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.

Response:
{
  "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
}
MethodDescription
-32700Parse error — invalid JSON
-32600Invalid request — missing required fields
-32601Method not found
-32602Invalid params — wrong type or missing required params
-32603Internal error — server-side failure
-32000Server error — generic application error
-32001Resource not found (block, tx, identity)
-32002Insufficient funds
-32003Unauthorized — 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