Overview
Tenxo documentation
Tenxo is a decentralized GPU compute grid that connects hardware providers with AI developers. Jobs are end-to-end encrypted, billed per-second, and routed through a zero-knowledge matchmaker that never sees your data or encryption keys.
1. Providers register GPUs
Hardware owners install the Rust edge agent to advertise idle GPU capacity to the matchmaker.
2. Developers submit jobs
Encrypted payloads are uploaded, keys are exchanged via ECDH, and the matchmaker routes work to available agents.
3. Zero-knowledge execution
The matchmaker never possesses the AES encryption key. Only the client and GPU agent can decrypt the payload.
Reference architecture
+---------+ +------------+ +------------+
| Client | | Matchmaker | | GPU |
| (Alice) | | (Go HTTP) | | Provider |
+---------+ +------------+ +------------+
| | |
1. Install/Sign in | | |
─────────────────>| | |
POST /presign | | |
<────── URLs ─────| | |
2. Upload encrypted | | |
payload (PUT) | | |
──────────────────|──────────────────>| |
| (stores .enc) | |
3. ECDH key exchange | | |
via signaling | | |
─────────────────────────────────────>|─ ─ ─ ─ ─ ─ ─ ─ >|
| | |
4. Agent decrypts | | |
& runs job | | |
<──────────────────────────────────────|──────────────────|
| | |
5. Download results | | |
<──────────────────| | |
┌──────────────────────────────────────────────────────────────────────┐
│ ZERO-KNOWLEDGE PROPERTY │
│ │
│ Client: AES_key = HKDF(ECDH(client_priv, agent_pub)) │
│ Client sends: AES_key XOR ECDH(client_priv, agent_pub) │
│ Agent recovers: ECDH(agent_priv, client_pub) XOR received_value │
│ │
│ Matchmaker sees only the XOR'd value — never the plain AES key. │
└──────────────────────────────────────────────────────────────────────┘Quickstart
Get started in two paths
Choose your role below. Developers submit compute jobs. Providers supply GPU capacity.
For developers
Run AI workloads on the decentralized grid. Sign in with Supabase, get an API key auto-generated, then submit encrypted jobs through the CLI or dashboard.
Read developer guide →For providers
Turn idle GPU hardware into billable compute capacity. Install the Rust agent, register your node, and start earning when jobs are routed to your machine.
Read provider guide →Developer Guide
Submitting compute jobs
1Sign in to the console
Visit the Tenxo Console and sign in with Supabase (GitHub or email). Once authenticated, an API key with txn_ prefix is auto-generated for your account.
2Create a presigned upload
Use your Supabase JWT or API key to call POST /presign. This returns upload URLs and a server-generated job ID. An encryption key is derived automatically.
curl -X POST https://matchmaker.tenxo.ai/presign -H "Authorization: Bearer $TENXO_TOKEN" -H "Content-Type: application/json" -d '{"enc_key_b64": ""}'3Upload encrypted payload
Encrypt your workload with the AES-256-GCM key, then PUT it to the upload_url.
# Python SDK handles encryption automatically: tenxo run payload.tar.gz --gpu a5000 # Manual: curl -X PUT "$UPLOAD_URL" \ -H "Content-Type: application/octet-stream" \ --data-binary @encrypted_payload.bin
4Check job status & download results
Poll GET /jobs/<job_id> for status changes. Once complete, download from the result URL and decrypt with your AES key.
curl -H "Authorization: Bearer $TENXO_TOKEN" https://matchmaker.tenxo.ai/jobs/job-a1b2c3d4
# Response:
# {"job_id":"job-a1b2c3d4","status":"completed","result_url":"..."}Billing & credits
Tenxo uses a pre-paid credits model (RunPod model). Add credits via Razorpay (card or UPI), and usage is deducted per-second while your job runs. Failed jobs are billed only for actual compute time.
Per-second billing
Only pay for what you use. 1 second minimum.
Pre-paid credits
Top up your balance before submitting jobs.
Auto-stop
Jobs that fail are stopped automatically — no surprise charges.
Available GPU tiers
| GPU | VRAM | Use case | Price / hr |
|---|---|---|---|
| RTX 4090 | 24 GB | Fine-tuning, inference | $0.15 |
| RTX A5000 | 24 GB | Stable training runs | $0.22 |
| A100 | 40 GB | Large model training | $0.75 |
Provider Guide
Connecting your GPU hardware
1Prerequisites
- Linux machine (Ubuntu 22.04+ recommended)
- NVIDIA GPU with drivers installed (nvidia-smi works)
- Docker installed (for sandboxed job execution)
- Open port 8080 for WebSocket communication
- A Tenxo account (sign up at console.tenxo.ai)
2Install the edge agent
Run the one-command installer. It downloads the Rust binary, sets up a systemd service, and connects to the Tenxo matchmaker.
curl -fsSL https://tenxo-api.onrender.com/install.sh | bash -s -- --owner YOUR_USER_ID
Your user ID is available in the Provider Console after signing in.
3Heartbeat & liveness
Once running, the agent sends heartbeat signals every 30 seconds. Your node appears in the marketplace as idle and becomes available for job routing.
Agent heartbeat format
{
"type": "heartbeat",
"payload": {
"node_id": "gpu-node-001",
"gpu_model": "RTX 4090",
"gpu_vram_mb": 24576,
"tee_attested": true,
"load": 0.0
}
}4TEE attestation (optional)
If your machine supports AMD SEV-SNP or Intel TDX, the agent automatically generates an attestation quote during the signaling handshake. Verified nodes display aVerified badge in the marketplace.
With TEE
Full challenge-response attestation. report_data[32..64] verified.
Without TEE
Node runs as "Unverified". Jobs still accepted — no badge.
5Monitor your fleet
Visit the Provider Console to see all your registered nodes, their current status, GPU specs, TEE verification state, and heartbeat TTLs.
Provider earnings
Providers earn 93% of the compute price paid by developers. Payouts are processed weekly via Stripe Connect (minimum $50 threshold). Earnings accumulate per-second based on actual job execution time.
93% payout share
You keep almost all of the compute revenue.
Weekly payouts
Automatic transfers every Monday.
$50 minimum
Payouts trigger once earnings exceed $50.
CLI Reference
Python SDK & CLI
The tenxo Python package handles encryption, key exchange, and job submission from the command line.
Installation
pip install tenxo
Available commands
| Command | Description |
|---|---|
| tenxo run <file> | Encrypt and submit a job to the grid |
| tenxo status <job_id> | Check the status of a submitted job |
| tenxo download <job_id> | Download and decrypt job results |
| tenxo list | List all your active and completed jobs |
| tenxo config set --key <key> | Set your API key for authentication |
| tenxo nodes | List available GPU nodes on the grid |
Example workflow
# Authenticate tenxo config set --key txn_your_api_key_here # Submit a fine-tuning job tenxo run model.tar.gz --gpu a5000 --watch # List available GPUs tenxo nodes # Download results tenxo download job-a1b2c3d4
API Reference
REST endpoint reference
All authenticated endpoints require a Bearer token (Supabase JWT or txn_ API key) in the Authorization header.
Authentication
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/keys | List API keys (auto-generates first key) |
| DELETE | /api/keys/:hash | Revoke an API key |
| PATCH | /api/keys/:hash | Rename an API key |
Jobs & compute
| Method | Endpoint | Description |
|---|---|---|
| POST | /presign | Create a presigned upload URL and job ID |
| GET | /jobs/:id | Get job status and result URL |
| GET | /nodes | List all available GPU nodes |
| GET | /my-nodes | List provider's own registered nodes |
| POST | /jobs | Submit a job for execution |
Billing
| Method | Endpoint | Description |
|---|---|---|
| POST | /billing/setup-intent | Create a Razorpay order for adding credits |
| POST | /billing/verify-payment | Verify payment and save payment token |
| POST | /billing/charge | Charge saved payment method |
| GET | /billing/usage | Get current billing usage and balance |
Troubleshooting
Common issues & solutions
Agent won't connect — 'unauthorized' error
Verify your user ID is correct. Find it in the Provider Console after signing in. Provider accounts use your Supabase user ID.
Node shows 'unverified' TEE status
TEE attestation is optional. Nodes without AMD SEV-SNP or Intel TDX hardware run as 'Unverified' — jobs still execute. To enable attestation, ensure /dev/sev-guest is accessible (requires kernel support).
Job stuck in 'created' status
No available GPU node matched your job requirements. Check /nodes to see current supply. Try a different GPU tier (e.g., RTX 4090 instead of A100).
Billing charge failed
Ensure your Razorpay payment method has sufficient funds. Pre-paid credits are deducted per-second. If auto-charge fails, add credits manually in the billing settings.
API key not working
API keys are auto-generated on first visit to the Developer Console. If revoked, a new key is generated on your next API request. Make sure you're using the txn_ prefix.