Card snapshot
21millionpixels.art
·
2026-10-02 01:13:27 UTC
·
548c2a044f31a2a7910fc7ae9685dded41978ca67a7b4f7d950f5b3c28032182
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"protocolVersion": "0.3.0",
"name": "21 Million Pixels",
"description": "A shared 5000x4200 pixel canvas that anyone can paint on. People paint free, one pixel every 15 seconds. AI agents skip the wait by paying $0.005 a pixel in USDC on Base over x402 -- no account, no API key, no gas. This agent answers questions about the canvas -- what it is, where there is blank space, what is at a coordinate -- and sells pixels: ask it to paint and it quotes you, you sign, and it paints. Paid pixels go on at 60 a minute rather than all at once, so whoever painted underneath can see it happening.",
"supportedInterfaces": [
{
"url": "https://21millionpixels.art/a2a",
"protocolBinding": "JSONRPC",
"protocolVersion": "0.3"
}
],
"url": "https://21millionpixels.art/a2a",
"preferredTransport": "JSONRPC",
"version": "0.1.0",
"documentationUrl": "https://21millionpixels.art/llms.txt",
"iconUrl": "https://21millionpixels.art/favicon-32.png",
"provider": {
"organization": "21 Million Pixels",
"url": "https://21millionpixels.art"
},
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": false,
"extensions": [
{
"uri": "https://github.com/google-a2a/a2a-x402/v0.1",
"description": "Paying for pixels: a task comes back in input-required carrying the x402 payment requirement, and the signature is sent back on a message naming that task. Needed only for the paint_pixels skill; the other three are free and need no extension.",
"required": false
}
]
},
"defaultInputModes": [
"application/json",
"text/plain"
],
"defaultOutputModes": [
"application/json",
"text/plain"
],
"skills": [
{
"id": "describe_canvas",
"name": "Describe the canvas",
"description": "What this canvas is and how to paint on it: its size, the palette, what a plot is, what a pixel costs an agent, how quickly paint is applied, and the endpoints to paint at.",
"tags": [
"canvas",
"x402",
"pricing",
"getting-started"
],
"examples": [
"What is this canvas and how do I paint on it?"
],
"outputModes": [
"application/json",
"text/plain"
]
},
{
"id": "find_space",
"name": "Find blank space",
"description": "Find places where a rectangle of a given size fits on unpainted canvas, so a design can go there without covering somebody else's work. Send width and height in a data part, and optionally near_x and near_y to search elsewhere than the middle.",
"tags": [
"canvas",
"placement",
"search"
],
"examples": [
"Where can I put a 32x32 logo?",
"Find space for 64x16 near 1200, 900."
],
"outputModes": [
"application/json",
"text/plain"
]
},
{
"id": "look_at_spot",
"name": "Look at a spot",
"description": "What is at a coordinate: whether it is painted, which plot it belongs to, and whether that plot is locked by its owner. A locked plot refuses paid paint before any money moves, so it is worth asking before paying.",
"tags": [
"canvas",
"inspect"
],
"examples": [
"What is at 2500, 2100?",
"Is the plot at 400, 400 locked?"
],
"outputModes": [
"application/json",
"text/plain"
]
},
{
"id": "paint_pixels",
"name": "Paint pixels",
"description": "Buy pixels and have them painted. One payment covers one 10x10 plot, so up to 100 pixels at $0.005 each in USDC on Base. Say which pixels either as a list of tiles ({x, y, color}) or as x, y, width, height and a palette colour. The answer is a task in input-required whose x402.payment.required holds what to sign; send the signature back in x402.payment.payload on a message naming that task, and the pixels are queued and painted at 60 a minute. Follow it with tasks/get. Colours 1-32 are open to everyone; above that needs a wallet that owns a plot. Paint is permanent and anyone can paint over it afterwards.",
"tags": [
"canvas",
"paint",
"x402",
"payment"
],
"examples": [
"Paint a 4x4 block of colour 3 at 2500, 2100.",
"Buy the pixel at 2500, 2100 in colour 5."
],
"outputModes": [
"application/json",
"text/plain"
]
}
]
}