NORMIES API
Token rendering, original mint data, Canvas state, burn history, zombies, Legendary Canvas, ERC-8004 agent metadata and rarity, read straight from Ethereum through the Ponder indexer. 50+ community tools already build on it. Rate limit: 60 requests per minute per IP (sliding window).
1,600 bits, one face.
Every Normie is a 40×40 monochrome bitmap packed into 200 bytes. Pixel strings returned by the API are 1600-character sequences of 0s and 1s in this exact layout.
| Grid Size | 40 × 40 pixels by default; 50, 60, 70 or 80 after enlargement |
| Bit Order | MSB first; most significant bit is the leftmost pixel |
| Layout | Row-major, top-left to bottom-right |
| Pixel On | 1 — dark gray (#48494b) |
| Pixel Off | 0 — light gray (#e3e5e4) |
| Storage Size | ceil(n²/8) bytes: 200, 313, 450, 613 or 800. The last 4 bits of a 50 or 70 bitmap are padding |
The full surface.
Core
5 endpointsDocumentation, favicon, and health.
- GET
/Human-readable API documentation.
- GET
/llms.txtLLM/tool-readable API documentation.
- GET
/favicon.pngPNG favicon.
- GET
/favicon.icoPNG favicon served at the ICO path.
- GET
/healthHealth check. Response: { "status": "ok" }.
Normie Token Data
25 endpointsActive endpoints apply zombie and Canvas state. Original endpoints ignore zombie conversion and Canvas edits. Token IDs are 0–9999.
- GET
/normie/all/originalBulk original mint dump: token ID, raw image data, decoded traits, pixel count, block number, timestamp, tx hash.
- GET
/normie/all/original/dataAlias-style bulk original mint dump with the same token rows.
- GET
/normie/all/original/traitsDecoded original traits for all indexed tokens.
- GET
/normie/all/original/traits/binaryRaw original bytes8 trait hex for all indexed tokens.
- GET
/normie/all/original/pixelsOriginal raw image data and pixel counts for all indexed tokens.
- GET
/normie/all/original/canvasCanvas-oriented alias for the original bitmap rows.
- GET
/normie/{id}/ownerCurrent indexed owner.
- GET
/normie/{id}/pixelsActive 40×40 bitmap as a 1600-character 0/1 string.
- GET
/normie/{id}/traits/binaryRaw original mint trait hex.
- GET
/normie/{id}/traitsDecoded original mint traits.
- GET
/normie/{id}/image.svgActive SVG image. Zombie art and Canvas transforms are applied when present.
- GET
/normie/{id}/image.pngActive 1000×1000 PNG image rendered from the active SVG.
- GET
/normie/{id}/metadataActive NFT metadata JSON with Level, Pixel Count, Action Points, Customized, zombie attributes when converted, and Legendary Canvas artist when set.
- GET
/normie/{id}/legendary-canvasLegendary Canvas state for a token.
- GET
/normie/{id}/original/pixelsOriginal mint bitmap as a 1600-character 0/1 string.
- GET
/normie/{id}/original/image.svgOriginal mint SVG.
- GET
/normie/{id}/original/image.pngOriginal mint PNG.
- GET
/normie/{id}/zombieToken-scoped zombie info plus conversion history.
- GET
/normie/{id}/zombie/attributesZombie attributes for a converted token, or an empty list if not converted.
- GET
/normie/{id}/zombie/pixelsZombie bitmap as a 1600-character string.
- GET
/normie/{id}/zombie/image.svgZombie SVG image.
- GET
/normie/{id}/zombie/image.pngZombie PNG image.
- GET
/normie/{id}/canvas/pixelsCanvas transform bitmap as a 1600-character string.
- GET
/normie/{id}/canvas/diffPixel diff between active base art and Canvas transform.
- GET
/normie/{id}/canvas/infoCanvas level, the pixels on the Normie (actionPoints), customized flag, delegate, delegate setter, gridSize, baseCleared, migrated, lockedPixels and freePixels.
Canvas
4 endpointsGlobal state for the burn-to-edit programmable canvas, plus per-token pixels and canvas services.
- GET
/canvas/statusGlobal Canvas contract status: paused state, max burn percent, tier thresholds, tier minimum percents, and a pixelMarket object with enlargement and blank canvas prices, the treasury and the market fee config.
- GET
/canvas/token/{id}/pixelsPixels on one Normie: attached, locked (backing the overlay), free, level, gridSize, baseCleared.
- GET
/canvas/token/{id}/activityLedger events that changed the pixels attached to a token, newest first. Query: limit, offset.
- GET
/canvas/sinksPixels spent on canvas services: enlargements and blank canvases. Query: tokenId, kind (enlarge or clearBase), limit, offset.
Pixels
5 endpointsWallet-level pixel balances from NormiesCanvasStorageV2. 404 until the Pixel Market stack is configured.
- GET
/pixels/balance/{address}Wallet balance plus the pixels on the wallet’s Normies: attached, locked, free and a per-token breakdown.
- GET
/pixels/holdersHolders of #PIXEL, largest first. balance = wallet + listed (open listings) + attached (on owned Normies). Query: limit, offset.
- GET
/pixels/holders/{address}One wallet counted the same way: { balance, wallet, listed, attached, normiesWithPixels }.
- GET
/pixels/activity/{address}Wallet balance moves involving the address, newest first. Query: limit, offset.
- GET
/pixels/supplyTotal pixels in wallets and attached to migrated Normies, plus the number of holding wallets.
Pixel Market
14 endpointsSell-side order book, ETH priced per pixel. Prices and volumes are wei strings. 404 until the stack is configured.
- GET
/market/statusMarket config from the chain: paused flag, fee and revenue-share basis points, canvas service prices.
- GET
/market/listingsListings with seller, price per pixel, amount, remaining, fill mode, expiry and status. Query: status (active, filled, cancelled, all), seller, partial, sort (price-asc, price-desc, amount-desc, newest), expired, limit, offset.
- GET
/market/listings/{id}One listing plus its fills.
- GET
/market/depthActive listings grouped by price level, cheapest first.
- GET
/market/fillsFill feed with buyer, seller, amount, price, gross and fee. Query: limit, offset, after_timestamp, sort.
- GET
/market/fills/address/{address}Fills where the address bought or sold. Query: limit, offset.
- GET
/market/statsTotals, active listings, pixels listed, best ask, last price, 24h volume, fee config.
- GET
/market/candlesOHLC in wei per pixel from fills, with volume and pixel counts per bucket. Query: interval (1h, 4h, 1d), limit 1-1000.
- GET
/revshare/configRevenue share scoring rules and their configHash, which every posted epoch records on chain.
- GET
/revshare/statusPool balance, what is promised to posted epochs, what is waiting for the next one, the claim window and totals.
- GET
/revshare/epochsPosted epochs with root, amount, claimed, block range, claimableAt and status.
- GET
/revshare/epochs/{id}/proof/{address}Index, amount and Merkle proof for NormiesRevenuePool.claim.
- GET
/revshare/wallet/{address}Live score, share and breakdown (a projection), claimable epochs with proofs, and past claims.
- GET
/revshare/tiersScoring wallets per cell of the tier grid: Normie bracket x #PIXEL boost.
History
16 endpointsBurns, transforms, and indexer stats.
- GET
/history/burnsPaginated Canvas burn commitments. Query: limit 1–100, offset.
- GET
/history/burns/{commitId}One burn commitment plus burned token details. Commit ids restart at 0 on the V2 canvas; query version=1|2 (defaults to the newest configured).
- GET
/history/burns/pending/legacyOriginal-canvas commitments not yet revealed there; anyone can reveal them on that canvas. Query: owner, limit, offset.
- GET
/history/burns/address/{address}Burn commitments created by a wallet. Query: limit, offset.
- GET
/history/burns/receiver/{tokenId}Burn commitments that credited pixels to a receiver token. Wallet burns (toWallet: true) are not listed here. Query: limit, offset.
- GET
/history/burned-tokensPaginated list of burned token records. Query: limit, offset.
- GET
/history/burned-idsEvery burned token id in one response: { count, ids }, ids ascending.
- GET
/history/burned/{tokenId}Burn record for a token.
- GET
/history/burned/{tokenId}/image.svgOriginal SVG for a burned token.
- GET
/history/burned/{tokenId}/image.pngOriginal PNG for a burned token.
- GET
/history/customizedCanvas transform event sync feed: events, unique token IDs, count, hasMore, timestamp cursor. Query: limit, offset, after_timestamp/since_timestamp, sort=asc|desc.
- GET
/history/normie/{id}/versionsTransform versions for a token, oldest first, with change count, new pixel count, gridSize, cleared, transformer, block, timestamp, and tx hash. Query: limit, offset.
- GET
/history/normie/{id}/version/{version}/pixelsHistorical composited pixel string for a transform version.
- GET
/history/normie/{id}/version/{version}/image.svgHistorical composited SVG for a transform version.
- GET
/history/normie/{id}/version/{version}/image.pngHistorical composited PNG for a transform version.
- GET
/history/statsIndexer summary counts for burn commitments, burned tokens, transforms, token data, zombies, Legendary Canvas, the pixels earned by burning (sum of burn rewards) and the pixels carried over between Normies, plus pixel supply and market totals.
Holders
2 endpointsWallet holdings and Canvas delegations.
- GET
/holders/{address}Current indexed token IDs held by a wallet.
- GET
/delegations/{address}Canvas edit rights delegated to a wallet, filtered to the delegations the canvas still honours. Delegations set by a previous owner are dropped. Returns tokenIds plus an owners map.
Zombies
8 endpointsMerkle-gated commit-reveal conversions that turn eligible Normies into bespoke Zombies.
- GET
/zombies/statusZombie contract status and pool configuration.
- GET
/zombies/conversionsPaginated zombie conversion commitments and reveal state. Query: limit, offset.
- GET
/zombies/wallet/{address}Zombie conversions for a qualifying wallet. Query: limit, offset.
- GET
/zombies/token/{id}Zombie info plus conversion history for a token.
- GET
/zombies/token/{id}/attributesZombie attributes for a token.
- GET
/zombies/token/{id}/pixelsZombie bitmap as a 1600-character string.
- GET
/zombies/token/{id}/image.svgZombie SVG image.
- GET
/zombies/token/{id}/image.pngZombie PNG image.
Legendary Canvas
2 endpointsTokens marked with the Legendary Canvas artist trait.
- GET
/legendary-canvasPaginated list of tokens marked with the Legendary Canvas artist trait. Query: limit, offset.
- GET
/legendary-canvas/token/{id}Legendary Canvas state for one token.
ERC-8004 Agents
13 endpointsAwakened Normies bound to on-chain agent identities.
- GET
/agents/metadata/{tokenId}ERC-8004 metadata JSON served as the on-chain agent URI.
- GET
/agents/persona-preview/{tokenId}Persona JSON for any token, whether or not it is registered as an agent.
- GET
/agents/identity/{tokenId}Trait-derived agent name, type, and raw trait map.
- GET
/agents/info/{tokenId}Registered-agent persona, traits, live canvas state, registration metadata, and placeholder interaction/MCP status.
- GET
/agents/by-agent-id/{agentId}/infoReverse lookup by ERC-8004 agent ID, same shape as /agents/info/{tokenId}.
- GET
/agents/listPaginated registered-agent gallery feed enriched with identity. Query: limit 1–100, sort=newest|oldest, optional cursor agent ID.
- GET
/agents/searchSearch registered agents by name, token ID, or agent ID. Query: q, limit 1–50.
- GET
/agents/countTotal registered Normies agents.
- GET
/agents/agent-card/{tokenId}A2A v0.3.0 Agent Card JSON linked from ERC-8004 metadata.
- GET
/agents/image/{tokenId}Composited SVG image for an agent.
- GET
/agents/binding/{tokenId}Normies-only ERC-8004 binding lookup for one token.
- POST
/agents/binding/batchBatch binding lookup. Body: { "tokenIds": [...] }.
- GET
/agents/by-agent-id/{agentId}Reverse lookup returning the raw binding for an agent ID.
Rarity
18 endpointsPowers rarity.normies.art. Historical routes recompute ownership, burns, traits, and ranks at a block number; they omit OpenSea listings and floor price.
- GET
/rarity/docsSmall JSON list of rarity endpoints.
- GET
/rarity/statsLive rarity stats: indexed count, live supply, burned count, weights, listing count, floor price, and awakened-agent count.
- GET
/rarity/normiesPaginated live rarity list with rank, score, attributes, listing data, fair value, underpriced flag, burn count, and awakened-agent metadata. Query: page, limit 1–100, sort, order, search, listed=1, underpriced=1, the100=1, awake=1, px_tier, wallet_ids, trait_* filters.
- GET
/rarity/normie/{id}Full live rarity detail for one token. Returns 410 if burned.
- POST
/rarity/normie/{id}/refreshForces the live rarity collection cache to reload, then returns the same detail shape.
- GET
/rarity/normie/{id}/personaAwakened-agent persona fields used by the rarity modal. 404 if not an agent.
- GET
/rarity/traitsTrait filter counts over live, non-burned tokens.
- GET
/rarity/holder/{addressOrEns}Current indexed rarity holdings for a wallet. ENS names resolved at request time.
- GET
/rarity/recursive-burn-holdersLeaderboard of current wallets by recursive burn count of held customized tokens. Query: limit 1–200, optional wallet.
- GET
/rarity/historical/{blockNumber}/statsRarity stats recomputed at an Ethereum block number.
- GET
/rarity/historical/{blockNumber}/normiesPaginated rarity list at a block number. Same non-marketplace filters and sorts as the live list.
- GET
/rarity/historical/{blockNumber}/normie/{id}Full rarity detail at a block number. 410 if burned at that block, 404 if not indexed yet.
- GET
/rarity/historical/{blockNumber}/traitsTrait filter counts over live, non-burned tokens at a block number.
- GET
/rarity/historical/{blockNumber}/holder/{addressOrEns}Indexed wallet holdings at a block number.
- GET
/rarity/historical/{blockNumber}/recursive-burn-holdersRecursive-burn leaderboard at a block number. Query: limit 1–200, optional wallet.
- GET
/rarity/listings/streamServer-Sent Events for listing changes: listed, sold, cancelled.
- GET
/rarity/legendaryRarity-app Legendary Canvas curation config with current and upcoming arrays.
- PUT
/rarity/admin/legendaryAdmin-only save for Legendary Canvas curation config. Requires x-admin-key.
Ethereum mainnet.
Normies
0x9Eb6E2025B64f340691e424b7fe7022fFDE12438Core ERC721C token with ERC-2981 royalties.
NormiesStorage
0x1B976bAf51cF51F0e369C070d47FBc47A706e602SSTORE2 bitmap and trait storage with XOR encryption.
NormiesRenderer
0xBe57fC4D0c729b8e8d33b638Dd441F57365e4c25V1 renderer: animated noise before the reveal, static SVG after.
NormiesRendererV2
0x7818f24d3239c945510e0a1a523dd9971812c6c0V2 renderer: static noise before the reveal.
NormiesRendererV3
0x1af01b902256d77cf9499a14ef4e494897380b05V3 renderer: run-length SVG, Pixel Count trait, canvas animation URL.
NormiesRendererV4
0x8eC46Cc1f306652868a4dfbAAae87CBa2715A0eBV4 Canvas-aware renderer: composited SVG and the Canvas traits.
NormiesRendererV5
0x7c726f02C5e840e1656b522A5C22caaf87C1C35CV5 renderer: V4 plus the Zombie metadata and art.
NormiesRendererV6
0xd6747533697878a6a3a29B5cCf815740BA23998DRenders any canvas size and adds the Canvas Size and Blank Canvas traits.
NormiesMinter
0xC74994dD70FFb621CC514cE18a4F6F52124e296dV1 minting with EIP-191 signatures.
NormiesMinterV2
0xc513272597d3022D77b3d7EEBA92cea5D7fb2808V2 minting with delegate.xyz V1 and V2 cold wallet delegation.
NormiesCanvas
0x64951d92e345C50381267380e2975f66810E869cThe original canvas: burns, edits and delegation. Paused.
NormiesCanvasStorage
0xC255BE0983776BAB027a156681b6925cde47B2D1SSTORE2 storage for the original canvas’s edit layers.
NormiesCanvasV2
0xF14f2852e1fD6A4108156054AF49B3915dc40E2eThe canvas: burns, painting, pixel moves, bigger and blank canvases.
NormiesCanvasStorageV2
0x96F2DA32Bb9D429d59ac13dB469f4950cBe02084Edit layers of any size, plus wallet and per-Normie pixel balances and allowances.
NormiesPixelMarket
0x86156A8d6e4B9925F7fEca527ea5D71B0deeDB64The sell-side #PIXEL order book.
NormiesRevenuePool
0x481384812e79bf0d11FC0b1704af445D5F06813cHolds the revenue share and pays epochs against Merkle proofs.
NormiesRoyaltySplitter
0xA68A225f62772E6158f2B5f8afC184AdB69c3282Royalty receiver: half to the team, half to the revenue pool.
NormiesZombie
0x18533ad55a54c3847Da06A48b51aD7DcB2551202Merkle-gated commit-reveal converter that turned 21 Humans into Zombies.
NormiesZombieStorage
0xA331bD22C90D1DA096934Db8bc6b69F0e1491E26SSTORE2 storage for the Zombie pool and conversion records.
NormiesLegendaryCanvas
0xfA55f6592522dA74224a67c7D3Fd1DF759c628e8Owner-managed registry of Legendary Canvas artist traits.
Adapter8004
0xde152AfB7db5373F34876E1499fbD893A82dD336Binds a Normie to an ERC-8004 agent identity.
delegate.xyz V2
0x00000000000000447e69651d841bD8D104Bed493Delegation registry read for minting and painting rights.
delegate.xyz V1
0x00000000000076A84feF008CDAbe6409d2FE638BThe older delegation registry, read alongside V2.
Common responses.
Every endpoint sets an explicit public Cache-Control policy — shown per endpoint above. Immutable token image data, raw traits, and decoded traits are cached in-process with no TTL.
| 200 | Success |
| 400 | Invalid token, address, query, or body |
| 401 | Invalid admin key |
| 403 | Admin disabled |
| 404 | Not found or not indexed |
| 410 | Burned token on rarity detail |
| 502 | Upstream indexer, RPC, or provider failure |
