Show HN: X402vps – Docker containers for AI agents, paid per hour with USDC
X402vps provides on-demand Docker containers for AI agents, paid per hour with USDC on Base mainnet. No signup or API keys needed—your wallet is your identity. Agents request a container, receive a 402 payment challenge, pay with EIP-3009, and instantly get a running environment with optional internet access. Plans range from $0.01/hr (Atom, no internet) to $0.08/hr (Core, 2GB bandwidth).
x402vps — containers for agents. pay per hour.
⚡ X402 · BASE · USDC
DOCKER CONTAINERS
FOR AI AGENTS
PAY PER HOUR
No signup. No API key. No dashboard. Your wallet is your identity. USDC on Base mainnet. Internet access on node & core plans — scrape, fetch, install.
agent@x402vps — bash
MAINNET LIVE · SETTLED ON BASE
HOW IT WORKS
FOUR STEPS. NO HUMANS INVOLVED.
1
Agent Requests
POST /api/create with plan + hours
2
Gets 402
Server responds with USDC payment challenge
3
Agent Pays
Signs EIP-3009 transfer, retries with proof
4
Container Runs
Docker provisioned. Exec + internet — ready
SIMPLE PRICING
PAY PER HOUR. NO SUBSCRIPTIONS. EXEC IS FREE.
ATOM
$0.01/hr
0.1 VCPU · FROM $0.01
CPU 0.1 vCPU
RAM 256 MB
DISK 2 GB
INTERNET NO
BEST FOR SCRIPTS
CELL
$0.02/hr
0.25 VCPU · FROM $0.02
CPU 0.25 vCPU
RAM 512 MB
DISK 5 GB
INTERNET YES
BANDWIDTH 100 MB/hr
BEST FOR APIS
NODE
$0.04/hr
0.5 VCPU · FROM $0.04
CPU 0.5 vCPU
RAM 1 GB
DISK 10 GB
INTERNET YES
BANDWIDTH 500 MB/hr
BEST FOR SCRAPING
CORE
$0.08/hr
1.0 VCPU · FROM $0.08
CPU 1.0 vCPU
RAM 2 GB
DISK 20 GB
INTERNET YES
BANDWIDTH 2 GB/hr
BEST FOR BROWSERS
PREBUILT IMAGES
10 IMAGES. ZERO COLD START. RUN ON MIN TIER OR HIGHER.
alpine alpine:3.19 7 MB atom atom / cell / node / core wget, busybox
httpie x402vps/httpie 25 MB cell cell / node / core curl, httpie, jq, wget
sqlite x402vps/sqlite 250 MB cell cell / node / core sqlite3, python3, pandas
python x402vps/python 200 MB node node / core requests, beautifulsoup4, lxml, httpx
node x402vps/node 300 MB node node / core axios, cheerio, puppeteer-core
go golang:1.23 350 MB node node / core Go 1.23, gcc
chrome x402vps/chrome 600 MB core core only Chromium, Playwright, scrape.py
datascience x402vps/datascience 900 MB core core only pandas, numpy, matplotlib, sklearn
ubuntu ubuntu:24.04 80 MB core core only curl, wget, git, python3, node
rust rust:1.82-slim 1 GB core core only Rust 1.82, cargo
Each image has a minimum tier (RAM needed to run). You can run any image on a higher tier for more CPU/RAM/bandwidth — e.g. {"plan":"core","image":"python"} gives Python with 2GB RAM. Or pass any Docker image name for custom images (slower, pulls from Docker Hub).
SECURITY & INTERNET
ATOM ISOLATED. CELL/NODE/CORE HAVE INTERNET.
INTERNET TIERS (CELL/NODE/CORE)
Outbound HTTP/HTTPS (ports 80, 443, 8080, 8443)
wget / curl allowed for scraping & API calls
Writable rootfs — pip install, npm install
Bandwidth quota per plan, auto-tracked
Overage: $0.01/GB beyond quota
Per-container connection rate limiting
BLOCKED ON ALL TIERS
SMTP ports (25, 465, 587) — no spam
SSH outbound — no tunneling
Mining pools (3333, 4444, 5555, etc.)
IRC & C2 channels
nc, socat, reverse shells
All Linux capabilities dropped
API REFERENCE
JSON IN. 402 OUT. NO BULLSHIT.
GET /api service info + plans FREE
GET /health server health + uptime FREE
GET /api/list list your containers FREE
GET /api/status/:id container status + bandwidth FREE
POST /api/create {plan, image?, leaseHours?} — node/core have internet PAID
POST /api/exec {id, command} FREE
POST /api/extend {id, hours} — extends lease + bandwidth PAID
POST /api/destroy {id} FREE
$ QUICK START
bash
Create a container with internet (node plan, 1hr = $0.04)
curl -X POST https://x402vps.com/api/create \ -H "Content-Type: application/json" \ -d '{"plan":"node","leaseHours":1}'
Scrape a website (free, exec is always free)
curl -X POST https://x402vps.com/api/exec \ -H "Content-Type: application/json" \ -d '{"id":"ctr_4cb194","command":"wget -qO- https://api.github.com/zen"}'
Install packages (writable rootfs on node/core)
curl -X POST https://x402vps.com/api/exec \ -d '{"id":"ctr_4cb194","command":"apk add --no-cache python3"}'
Destroy when done
curl -X POST https://x402vps.com/api/destroy \ -d '{"id":"ctr_4cb194"}'
$ JAVASCRIPT AGENT
agent.js
import { x402Client, x402HTTPClient } from "@x402/core/client"; import { registerExactEvmScheme } from "@x402/evm/exact/client"; import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount("0x..."); const client = new x402Client(); registerExactEvmScheme(client, { signer: account, networks: ["eip155:8453"] }); const http = new x402HTTPClient(client);
// 1. Create a node container WITH internet ($0.04/hr) const resp = await fetch("https://x402vps.com/api/create", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ plan: "node", leaseHours: 1 }) });
// 2. Sign payment → retry with proof const req = JSON.parse(atob(resp.headers.get("payment-required"))); const payload = await client.createPaymentPayload(req); const headers = http.encodePaymentSignatureHeader(payload);
const paid = await fetch("https://x402vps.com/api/create", { method: "POST", headers: { ...headers, "Content-Type": "application/json" }, body: JSON.stringify({ plan: "node", leaseHours: 1 }) });
const container = await paid.json(); // { id: "ctr_4cb194", status: "running", internet: true, bandwidthUsed: { quotaMB: 500 } }
// 3. Scrape! (exec is FREE) const exec = await fetch("https://x402vps.com/api/exec", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ id: container.id, command: "wget -qO- https://httpbin.org/ip" }) });
RESOURCES
EVERYTHING AN AI AGENT NEEDS.
[TXT]
LLMS.TXT
Machine-readable summary for LLMs
[MD]
AGENTS.MD
Full integration guide with examples
[URL]
X402.ORG
HTTP 402 payment protocol docs