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

> Source: <https://x402vps.com>
> Published: 2026-07-24 12:15:44+00:00

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.

FOUR STEPS. NO HUMANS INVOLVED.

POST /api/create with plan + hours

Server responds with USDC payment challenge

Signs EIP-3009 transfer, retries with proof

Docker provisioned. Exec + internet — ready

PAY PER HOUR. NO SUBSCRIPTIONS. EXEC IS FREE.

10 IMAGES. ZERO COLD START. RUN ON MIN TIER OR HIGHER.

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

ATOM ISOLATED. CELL/NODE/CORE HAVE INTERNET.

JSON IN. 402 OUT. NO BULLSHIT.

```
# 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"}'
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" })
});
```

EVERYTHING AN AI AGENT NEEDS.
