# 21millionpixels.art Paint Batch

> 21millionpixels.art Paint Batch is a paid API for AI agents from 21millionpixels.art, paid per call via x402, $0.005/call, status unknown (last checked 2026-09-15).

Paint up to 100 tiles in a single plot on the shared 21-million-pixel canvas in one payment

## Facts

- Endpoint: POST https://21millionpixels.art/api/agent/paint-batch
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/21millionpixels-art-paint-batch-6b7200be
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_x6UAh3oIg5postOw6eoia

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability 21millionpixels-art-paint-batch-6b7200be -d '<json body>'
```

Example prompt: On the 21millionpixels canvas, paint 2 tiles inside plot 105250 — tile at column 10, row 20 in red (color 5) and tile at column 11, row 20 in blue (color 8) — under the username my-agent.

## When to prefer this

Use this endpoint when you need to paint multiple pixels (up to 100) within the same plot in a single atomic payment, making it more cost-efficient than calling the single-pixel endpoint repeatedly. Prefer this over the single-pixel sibling when painting 2 or more tiles in the same plot. This endpoint is specifically for the 21millionpixels.art collaborative shared canvas and is not a general image or NFT minting service.

## Known failure modes

- Tile coordinates outside the plot boundary — API returns error
- Color index out of range (must be 1-96, or 1-32 for non-plot-owners) — API returns error
- Duplicate tile entries in the batch — rejected due to uniqueItems constraint
- Payment insufficient or x402 payment protocol failure — payment not processed
- Plot index out of range (must be 0-209999) — API returns validation error
- Username format invalid (must match ^[a-z0-9_-]+$, 3-20 chars) — API returns error

## How this service works

Paint 2 pixels in one plot on 21millionpixels.art, a shared 21,000,000-pixel canvas, for one payment. Reads are free; paid pixels skip the human cooldown.

## Output

Returns a JSON object confirming the paint operation with: ok status, plot number, payer wallet address, number of tiles painted and pending, transaction hash, settlement status, canvas version number, username used, and whether the wallet owns the plot.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "plot": {
   "type": "integer",
   "maximum": 209999,
   "minimum": 0,
   "description": "the plot every tile in this batch falls inside; one payment covers one plot"
  },
  "tiles": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "x",
     "y",
     "color"
    ],
    "properties": {
     "x": {
      "type": "integer",
      "maximum": 4999,
      "minimum": 0,
      "description": "column, 0 at the left"
     },
     "y": {
      "type": "integer",
      "maximum": 4199,
      "minimum": 0,
      "description": "row, 0 at the top"
     },
     "color": {
      "type": "integer",
      "maximum": 108,
      "minimum": 0,
      "description": "palette index; 1-32 for everyone, 33-108 for wallets that own a plot, 0 clears the tile. GET /api/info lists the hex values and which indices are retired"
     }
    }
   },
   "maxItems": 100,
   "minItems": 1,
   "description": "the pixels to paint, all inside `plot`, each listed once; the price is tiles x the per-pixel price",
   "uniqueItems": true
  },
  "username": {
   "type": "string",
   "pattern": "^[a-z0-9_-]+$",
   "maxLength": 20,
   "minLength": 3,
   "description": "optional; the name this wallet paints under"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "plot": 105250,
  "payer": "0x857b06519e91e3a54538791bdbb0e22373e36b66",
  "plots": [
   105250
  ],
  "tiles": 2,
  "paidTo": "0xdD666CDCf2BCcff8D1C8161ed24FF26c0ed429b9",
  "painted": 0,
  "pending": 2,
  "settled": true,
  "version": 1234,
  "username": "my-agent",
  "plotOwned": false,
  "transaction": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/21millionpixels-art-paint-batch-6b7200be/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from 21millionpixels.art](https://www.zero.xyz/host/21millionpixels.art/llms.txt)
