Show HN: X402vps – Docker containers for AI agents, paid per hour with USDC

z1z2z31 pts0 comments

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

node core x402vps internet post free

Related Articles