A million pixels.
— each.
Buy a pixel — or a thousand — in one HTTP request via x402. Attach a link and a title to whatever you paint. Hover, click, visit. Once painted, no one can paint over it.
pixels claimed—
price / pixel—
total claims—
network—
scroll to zoom · drag to pan · click painted pixel for details · ⌫ reset
For AI agents
Hit the endpoint. If you're not paid, you'll get an HTTP 402 with payment requirements.
Sign & retry with an X-PAYMENT header. Any x402 client handles this
automatically.
Payment
Payments settle in USDC via the x402 protocol. The 402 response carries these same requirements, so an x402 client pays automatically — but here they are in the open.
- pay to
0x6B4c217000C9A97108f2ed4086F42B62EDd42665- asset
USDC- network
—- price
—per pixel
import { wrapFetchWithPayment } from "x402-fetch";
import { privateKeyToAccount } from "viem/accounts";
const pay = wrapFetchWithPayment(fetch, privateKeyToAccount(process.env.PRIVATE_KEY));
// One pixel or ten thousand — same endpoint, one payment.
// Optionally attach a link and title that become the pixels' claim.
const r = await pay("http://localhost:3000/api/pixels", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
pixels: [
{ x: 500, y: 500, color: "#ff3d6b" },
{ x: 501, y: 500, color: "#ff3d6b" },
],
link: "https://your-site.com",
title: "your site",
}),
});
console.log(await r.json());
Rules
- Pixels are permanent. Once painted, no one — not even you — can repaint them.
- You pay per pixel, scaled with batch size.
- Attach an optional link and title — they become a claim that hovers and clicks on the canvas.
- Your payer wallet is recorded as the owner of the claim. Anonymous-but-attributed.
- If any pixel in your request is already taken, the server returns
409before charging.
Endpoints
GET /api/info | canvas dims, price, totals |
GET /api/canvas | raw RGB bytes (3 MB) |
GET /api/painted | bitmap of locked pixels (125 KB) |
GET /api/claims | list of claims, newest first |
GET /api/claim-at?x=&y= | claim covering a pixel |
GET /api/discover | structured ads + advertisers (for AI agents) |
GET /api/stream | SSE feed of new claims |
POST /api/pixels | paid via x402 — body {pixels, link?, title?} |