Documentation

Build on Nodexo.

Explore verified GPU inventory, connect accounts, automate public API workflows, or run miner and validator infrastructure on the subnet.

Renter API

Public renters call the web API. The validator API is not the public renter interface.

Public testnet preview

Inventory, wallet login, account settings, and API shape are available now. Non-admin rental and top-up writes are gated before payment signing or provisioning until public rentals open.

Inventory
curl https://nodexo.ai/api/inventory
x402 rental API
curl -X POST https://nodexo.ai/api/rent \
  -H 'Content-Type: application/json' \
  -H 'X-PAYMENT: <x402-payment-header>' \
  -d '{
    "payment_mode": "x402",
    "gpu_model": "NVIDIA RTX A6000",
    "gpu_count": 1,
    "hours": 4,
    "ssh_pub_key": "ssh-ed25519 ..."
  }'
Account API key
export NODEXO_API_KEY=vc_...
nodexo --api-url https://nodexo.ai/api credits
nodexo --api-url https://nodexo.ai/api rent --payment credits \
  --gpu A6000 \
  --ssh-key ~/.ssh/id_ed25519.pub

Agent Skills

Task-specific skill documents keep renter automation and operator automation separated.

Rental skill

Inventory discovery, x402 payment, rental creation, status polling, SSH output, recovery tokens, and top-ups.

Open
Operator skill

Miner and validator setup, PM2 operation, endpoint hardening, Cloudflare domains, and production checks.

Open

CLI Reference

The same CLI covers public rentals, account API keys, recovery-token management, and miner fleet operations.

Preview behavior

Inventory, marketplace, quote, account, and operator commands are available during preview. Non-admin rent, extend, and top-up commands return the launch gate before funds move or containers start.

Inventory and x402
export NODEXO_API_URL=https://nodexo.ai/api
export NODEXO_EVM_PRIVATE_KEY=0x...

nodexo inventory
nodexo marketplace
nodexo quote --gpu A6000 --duration 1h --ssh-key ~/.ssh/id_ed25519.pub
nodexo rent --payment x402 --gpu A6000 --duration 1h --ssh-key ~/.ssh/id_ed25519.pub
Account credits and SSH keys
export NODEXO_API_KEY=vc_...

nodexo credits
nodexo account-rentals
nodexo account-ssh-keys list
nodexo account-ssh-keys add --ssh-key ~/.ssh/id_ed25519.pub --label workstation
nodexo account-ssh-keys remove --key-id <id>
nodexo rent --payment credits --gpu A6000 --storage-gb 30 --ssh-key ~/.ssh/id_ed25519.pub
Rental management
export NODEXO_RENTAL_RECOVERY_TOKEN=...

nodexo rental-info <rental_id>
nodexo ssh-config <rental_id>
nodexo connect <rental_id>
nodexo rental-extend <rental_id> --hours 4
nodexo rental-key add <rental_id> --ssh-key ~/.ssh/id_ed25519.pub
nodexo rental-key remove <rental_id> --key-text "ssh-ed25519 AAAA..."
nodexo rental-end <rental_id>
Operator fleet
nodexo fleet
nodexo --wallet <coldkey> --hotkey <hotkey> fleet

# Testnet: netuid 468
nodexo fleet --chain-direct --subtensor-network test

# Mainnet: netuid 106
nodexo fleet --chain-direct --subtensor-network finney

Quick Install

Install miner and validator hosts with the Nodexo installer.

Miner host
INSTALL_HOST="https://raw.githubusercontent.com"
INSTALL_PATH="nodexo-ai/nodexo/main/install.sh"
curl -fsSL "$INSTALL_HOST/$INSTALL_PATH" | bash
Validator host
INSTALL_HOST="https://raw.githubusercontent.com"
INSTALL_PATH="nodexo-ai/nodexo/main/install.sh"
curl -fsSL "$INSTALL_HOST/$INSTALL_PATH" | \
  bash -s -- --validator
Public testnet preview
test / netuid 468 / chain_config_testnet.json
Paid mainnet
finney / netuid 106 / chain_config_mainnet.json

Miner Setup

Miners host GPU containers, emit proofs, expose validator-signed lifecycle routes, and allocate SSH ports.

Install miner
bash scripts/setup_miner.sh
Testnet launch
bash scripts/setup_miner.sh --start \
  --wallet nodexo_miner \
  --hotkey default \
  --subtensor-network test \
  --endpoint http://YOUR_PUBLIC_IP:8091
Mainnet launch
# Requires chain_config_mainnet.json in the release repo.
bash scripts/setup_miner.sh --start \
  --wallet nodexo_miner \
  --hotkey default \
  --subtensor-network finney \
  --endpoint https://YOUR_PUBLIC_MINER_DOMAIN
Endpoint proxy
bash scripts/setup_endpoint_proxy.sh --role miner --public-port 8091
Start with PM2
cp ecosystem.config.example.cjs ecosystem.config.cjs
# edit wallet, hotkey, network, endpoint
pm2 start ecosystem.config.cjs --only miner-nodexo
pm2 logs miner-nodexo --lines 80
pm2 save
Link miner hotkey

Open the Operator page, enter the miner hotkey, and create a challenge. The page shows the exact command with the challenge already filled in. Run that generated command on a machine with the miner hotkey to link the hotkey to your signed-in account. It does not move funds or change chain state.

Open Operator page
API backend
binds behind nginx on an internal interface
Public port
8091/tcp by default
Rental ports
20000-20100/tcp by default
Proof artifact
downloaded from the manifest during setup
Rental controller
strict validator hotkey allowlist
Validator routing

Proof and heartbeat traffic goes to validators discovered from chain. EVM validators publish a ValidatorRegistry URL; no-EVM validators publish a native Bittensor axon endpoint. Container lifecycle calls require a signed request from the configured primary validator hotkey.

Network configuration

Chain config files contain public contract addresses and deployment metadata only. Use --subtensor-network test or --subtensor-network finney to select the network. Operators running a local subtensor can pass a URL-like endpoint at runtime; it is not stored in the release config.

Open operator dashboard

Supported GPU Configurations

These GPU configurations are currently accepted by Nodexo. Other configurations will appear here after validation. Runtime config v30.

GPUVRAMCovered range
NVIDIA A100 80GB PCIe80 GB1x
NVIDIA A100-SXM4-80GB80 GB1-4x
NVIDIA H100 80GB HBM380 GB1-2x
NVIDIA RTX A600048 GB1x
NVIDIA GeForce RTX 409024 GB1x

Miner setup stops before registration when the detected GPU configuration is not on this list.

Validator Setup

Validators verify proofs, maintain inventory projections, score executors, and set weights.

Install validator
bash scripts/setup_validator.sh
Endpoint proxy
bash scripts/setup_endpoint_proxy.sh --role validator --public-port 9443
Testnet start with PM2
cp ecosystem.config.example.cjs ecosystem.config.cjs
# edit wallet, hotkey, endpoint, DB_URL, and keep --subtensor-network test
# proof-verifying validators normally use no-EVM mode
pm2 start ecosystem.config.cjs --only vali-nodexo
pm2 logs vali-nodexo --lines 100
pm2 save
Mainnet switch
# Requires chain_config_mainnet.json in the release repo.
# Update ecosystem config to --subtensor-network finney and netuid 106.
pm2 restart vali-nodexo --update-env
pm2 logs vali-nodexo --lines 100
Default role
verify proofs and set weights
Discovery
native axon or ValidatorRegistry
Rental control
primary validator only
Canaries
primary validator only
Production DB
Postgres recommended
Validator role

Validators can verify miner proofs, ingest signed heartbeats, score executors, and set Bittensor weights. The primary validator handles rental orchestration. Low-resource validators can run follower mode to set weights from published network state.

RPC selection

The validator uses the runtime network flag for both Subtensor and Bittensor EVM access. Public installs use test or finney. A local node is an explicit runtime endpoint, not a value committed into chain_config_*.json.

Endpoint Security

The web app, validator, and miner APIs have different trust boundaries.

Web app

Public renter API, wallet login, x402, credits, billing, and rental recovery.

/api/inventory/api/rent/api/account/*
Validator

Public ingress is signed miner traffic and status only. Control routes stay internal.

/proofs/*/heartbeat/monitor/report/chain/context
Miner

Lifecycle routes are validator-signed. Public endpoint must not be loopback.

/containers/ports/identity/challenge/hardware

Cloudflare Domains

Cloudflare is useful for HTTPS API endpoints, but rental SSH ports remain direct TCP unless you add a TCP proxy product.

Recommended API path
  • Use a real domain on port 443.
  • Terminate HTTPS at nginx on the host.
  • Proxy nginx to the loopback Python backend.
  • Use Cloudflare WAF/rate limits without browser challenges.
Do not hide SSH by accident
  • Cloudflare HTTP proxy does not carry rental SSH ports.
  • Keep `20000-20100/tcp` directly reachable.
  • Use Spectrum or another TCP proxy only if deliberately designed.
  • Never put Access login challenges on miner or validator protocol routes.

Artifacts

The native ZkGEMM proof extension is distributed by immutable manifest, not built from CUDA source on operator hosts. The current manifest is for public testnet preview; paid mainnet uses a production artifact domain.

Current testnet artifact manifest
https://pub-ef00d9a98f734d94af3c8904eba0eb11.r2.dev/zkgemm/v0.1.2/manifest.json
Python ABI
cp310 / cp311 / cp312
Torch / CUDA
2.10 / cu128
Format
.so today, wheel-ready manifest
Verification
SHA-256, import test, CUDA smoke test
Paid mainnet
production artifact domain before public rentals

Operations

Use PM2 for runtime management and keep persistent state out of the git checkout.

Fleet status
nodexo fleet
nodexo inventory

# Testnet: netuid 468
nodexo fleet --chain-direct --subtensor-network test

# Mainnet: netuid 106
nodexo fleet --chain-direct --subtensor-network finney
Service checks
pm2 status
pm2 logs miner-nodexo --lines 80
pm2 logs vali-nodexo --lines 100
curl https://YOUR_PUBLIC_MINER_DOMAIN/health
curl https://validator.nodexo.ai/health