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.<br>Your wallet is your identity. USDC on Base mainnet.<br>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.
Agent Requests
POST /api/create with plan + hours
Gets 402
Server responds with USDC payment challenge
Agent Pays
Signs EIP-3009 transfer, retries with proof
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.
ALIAS<br>BASE<br>SIZE<br>MIN TIER<br>RUNS ON<br>PRE-INSTALLED
alpine<br>alpine:3.19<br>7 MB<br>atom<br>atom / cell / node / core<br>wget, busybox
httpie<br>x402vps/httpie<br>25 MB<br>cell<br>cell / node / core<br>curl, httpie, jq, wget
sqlite<br>x402vps/sqlite<br>250 MB<br>cell<br>cell / node / core<br>sqlite3, python3, pandas
python<br>x402vps/python<br>200 MB<br>node<br>node / core<br>requests, beautifulsoup4, lxml, httpx
node<br>x402vps/node<br>300 MB<br>node<br>node / core<br>axios, cheerio, puppeteer-core
go<br>golang:1.23<br>350 MB<br>node<br>node / core<br>Go 1.23, gcc
chrome<br>x402vps/chrome<br>600 MB<br>core<br>core only<br>Chromium, Playwright, scrape.py
datascience<br>x402vps/datascience<br>900 MB<br>core<br>core only<br>pandas, numpy, matplotlib, sklearn
ubuntu<br>ubuntu:24.04<br>80 MB<br>core<br>core only<br>curl, wget, git, python3, node
rust<br>rust:1.82-slim<br>1 GB<br>core<br>core only<br>Rust 1.82, cargo
Each image has a minimum tier (RAM needed to run).<br>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.<br>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<br>/api<br>service info + plans<br>FREE
GET<br>/health<br>server health + uptime<br>FREE
GET<br>/api/list<br>list your containers<br>FREE
GET<br>/api/status/:id<br>container status + bandwidth<br>FREE
POST<br>/api/create<br>{plan, image?, leaseHours?} — node/core have internet<br>PAID
POST<br>/api/exec<br>{id, command}<br>FREE
POST<br>/api/extend<br>{id, hours} — extends lease + bandwidth<br>PAID
POST<br>/api/destroy<br>{id}<br>FREE
$ QUICK START
bash
# Create a container with internet (node plan, 1hr = $0.04)<br>curl -X POST https://x402vps.com/api/create \<br>-H "Content-Type: application/json" \<br>-d '{"plan":"node","leaseHours":1}'
# Scrape a website (free, exec is always free)<br>curl -X POST https://x402vps.com/api/exec \<br>-H "Content-Type: application/json" \<br>-d '{"id":"ctr_4cb194","command":"wget -qO- https://api.github.com/zen"}'
# Install packages (writable rootfs on node/core)<br>curl -X POST https://x402vps.com/api/exec \<br>-d '{"id":"ctr_4cb194","command":"apk add --no-cache python3"}'
# Destroy when done<br>curl -X POST https://x402vps.com/api/destroy \<br>-d '{"id":"ctr_4cb194"}'
$ JAVASCRIPT AGENT
agent.js
import { x402Client, x402HTTPClient } from "@x402/core/client";<br>import { registerExactEvmScheme } from "@x402/evm/exact/client";<br>import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount("0x...");<br>const client = new x402Client();<br>registerExactEvmScheme(client, { signer: account, networks: ["eip155:8453"] });<br>const http = new x402HTTPClient(client);
// 1. Create a node container WITH internet ($0.04/hr)<br>const resp = await fetch("https://x402vps.com/api/create", {<br>method: "POST",<br>headers: { "Content-Type": "application/json" },<br>body: JSON.stringify({ plan: "node", leaseHours: 1 })<br>});
// 2. Sign payment → retry with proof<br>const req = JSON.parse(atob(resp.headers.get("payment-required")));<br>const payload = await client.createPaymentPayload(req);<br>const headers = http.encodePaymentSignatureHeader(payload);
const paid = await fetch("https://x402vps.com/api/create", {<br>method: "POST",<br>headers: { ...headers, "Content-Type": "application/json" },<br>body: JSON.stringify({ plan: "node", leaseHours: 1 })<br>});
const...