Normies logoNORMIES
112 endpoints · open to everyone

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

https://api.normies.artllms.txt →GitHub →
Bitmap Format

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 Size40 × 40 pixels by default; 50, 60, 70 or 80 after enlargement
Bit OrderMSB first; most significant bit is the leftmost pixel
LayoutRow-major, top-left to bottom-right
Pixel On1 — dark gray (#48494b)
Pixel Off0 — light gray (#e3e5e4)
Storage Sizeceil(n²/8) bytes: 200, 313, 450, 613 or 800. The last 4 bits of a 50 or 70 bitmap are padding
Endpoints

The full surface.

Core

5 endpoints

Documentation, favicon, and health.

  • GET/

    Human-readable API documentation.

  • GET/llms.txt

    LLM/tool-readable API documentation.

  • GET/favicon.png

    PNG favicon.

  • GET/favicon.ico

    PNG favicon served at the ICO path.

  • GET/health

    Health check. Response: { "status": "ok" }.

Normie Token Data

25 endpoints

Active endpoints apply zombie and Canvas state. Original endpoints ignore zombie conversion and Canvas edits. Token IDs are 0–9999.

  • GET/normie/all/original

    Bulk original mint dump: token ID, raw image data, decoded traits, pixel count, block number, timestamp, tx hash.

  • GET/normie/all/original/data

    Alias-style bulk original mint dump with the same token rows.

  • GET/normie/all/original/traits

    Decoded original traits for all indexed tokens.

  • GET/normie/all/original/traits/binary

    Raw original bytes8 trait hex for all indexed tokens.

  • GET/normie/all/original/pixels

    Original raw image data and pixel counts for all indexed tokens.

  • GET/normie/all/original/canvas

    Canvas-oriented alias for the original bitmap rows.

  • GET/normie/{id}/owner

    Current indexed owner.

  • GET/normie/{id}/pixels

    Active 40×40 bitmap as a 1600-character 0/1 string.

  • GET/normie/{id}/traits/binary

    Raw original mint trait hex.

  • GET/normie/{id}/traits

    Decoded original mint traits.

  • GET/normie/{id}/image.svg

    Active SVG image. Zombie art and Canvas transforms are applied when present.

  • GET/normie/{id}/image.png

    Active 1000×1000 PNG image rendered from the active SVG.

  • GET/normie/{id}/metadata

    Active NFT metadata JSON with Level, Pixel Count, Action Points, Customized, zombie attributes when converted, and Legendary Canvas artist when set.

  • GET/normie/{id}/legendary-canvas

    Legendary Canvas state for a token.

  • GET/normie/{id}/original/pixels

    Original mint bitmap as a 1600-character 0/1 string.

  • GET/normie/{id}/original/image.svg

    Original mint SVG.

  • GET/normie/{id}/original/image.png

    Original mint PNG.

  • GET/normie/{id}/zombie

    Token-scoped zombie info plus conversion history.

  • GET/normie/{id}/zombie/attributes

    Zombie attributes for a converted token, or an empty list if not converted.

  • GET/normie/{id}/zombie/pixels

    Zombie bitmap as a 1600-character string.

  • GET/normie/{id}/zombie/image.svg

    Zombie SVG image.

  • GET/normie/{id}/zombie/image.png

    Zombie PNG image.

  • GET/normie/{id}/canvas/pixels

    Canvas transform bitmap as a 1600-character string.

  • GET/normie/{id}/canvas/diff

    Pixel diff between active base art and Canvas transform.

  • GET/normie/{id}/canvas/info

    Canvas level, the pixels on the Normie (actionPoints), customized flag, delegate, delegate setter, gridSize, baseCleared, migrated, lockedPixels and freePixels.

Canvas

4 endpoints

Global state for the burn-to-edit programmable canvas, plus per-token pixels and canvas services.

  • GET/canvas/status

    Global 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}/pixels

    Pixels on one Normie: attached, locked (backing the overlay), free, level, gridSize, baseCleared.

  • GET/canvas/token/{id}/activity

    Ledger events that changed the pixels attached to a token, newest first. Query: limit, offset.

  • GET/canvas/sinks

    Pixels spent on canvas services: enlargements and blank canvases. Query: tokenId, kind (enlarge or clearBase), limit, offset.

Pixels

5 endpoints

Wallet-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/holders

    Holders 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/supply

    Total pixels in wallets and attached to migrated Normies, plus the number of holding wallets.

Pixel Market

14 endpoints

Sell-side order book, ETH priced per pixel. Prices and volumes are wei strings. 404 until the stack is configured.

  • GET/market/status

    Market config from the chain: paused flag, fee and revenue-share basis points, canvas service prices.

  • GET/market/listings

    Listings 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/depth

    Active listings grouped by price level, cheapest first.

  • GET/market/fills

    Fill 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/stats

    Totals, active listings, pixels listed, best ask, last price, 24h volume, fee config.

  • GET/market/candles

    OHLC in wei per pixel from fills, with volume and pixel counts per bucket. Query: interval (1h, 4h, 1d), limit 1-1000.

  • GET/revshare/config

    Revenue share scoring rules and their configHash, which every posted epoch records on chain.

  • GET/revshare/status

    Pool balance, what is promised to posted epochs, what is waiting for the next one, the claim window and totals.

  • GET/revshare/epochs

    Posted 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/tiers

    Scoring wallets per cell of the tier grid: Normie bracket x #PIXEL boost.

History

16 endpoints

Burns, transforms, and indexer stats.

  • GET/history/burns

    Paginated 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/legacy

    Original-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-tokens

    Paginated list of burned token records. Query: limit, offset.

  • GET/history/burned-ids

    Every burned token id in one response: { count, ids }, ids ascending.

  • GET/history/burned/{tokenId}

    Burn record for a token.

  • GET/history/burned/{tokenId}/image.svg

    Original SVG for a burned token.

  • GET/history/burned/{tokenId}/image.png

    Original PNG for a burned token.

  • GET/history/customized

    Canvas 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}/versions

    Transform 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}/pixels

    Historical composited pixel string for a transform version.

  • GET/history/normie/{id}/version/{version}/image.svg

    Historical composited SVG for a transform version.

  • GET/history/normie/{id}/version/{version}/image.png

    Historical composited PNG for a transform version.

  • GET/history/stats

    Indexer 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 endpoints

Wallet 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 endpoints

Merkle-gated commit-reveal conversions that turn eligible Normies into bespoke Zombies.

  • GET/zombies/status

    Zombie contract status and pool configuration.

  • GET/zombies/conversions

    Paginated 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}/attributes

    Zombie attributes for a token.

  • GET/zombies/token/{id}/pixels

    Zombie bitmap as a 1600-character string.

  • GET/zombies/token/{id}/image.svg

    Zombie SVG image.

  • GET/zombies/token/{id}/image.png

    Zombie PNG image.

Legendary Canvas

2 endpoints

Tokens marked with the Legendary Canvas artist trait.

  • GET/legendary-canvas

    Paginated 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 endpoints

Awakened 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}/info

    Reverse lookup by ERC-8004 agent ID, same shape as /agents/info/{tokenId}.

  • GET/agents/list

    Paginated registered-agent gallery feed enriched with identity. Query: limit 1–100, sort=newest|oldest, optional cursor agent ID.

  • GET/agents/search

    Search registered agents by name, token ID, or agent ID. Query: q, limit 1–50.

  • GET/agents/count

    Total 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/batch

    Batch binding lookup. Body: { "tokenIds": [...] }.

  • GET/agents/by-agent-id/{agentId}

    Reverse lookup returning the raw binding for an agent ID.

Rarity

18 endpoints

Powers rarity.normies.art. Historical routes recompute ownership, burns, traits, and ranks at a block number; they omit OpenSea listings and floor price.

  • GET/rarity/docs

    Small JSON list of rarity endpoints.

  • GET/rarity/stats

    Live rarity stats: indexed count, live supply, burned count, weights, listing count, floor price, and awakened-agent count.

  • GET/rarity/normies

    Paginated 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}/refresh

    Forces the live rarity collection cache to reload, then returns the same detail shape.

  • GET/rarity/normie/{id}/persona

    Awakened-agent persona fields used by the rarity modal. 404 if not an agent.

  • GET/rarity/traits

    Trait 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-holders

    Leaderboard of current wallets by recursive burn count of held customized tokens. Query: limit 1–200, optional wallet.

  • GET/rarity/historical/{blockNumber}/stats

    Rarity stats recomputed at an Ethereum block number.

  • GET/rarity/historical/{blockNumber}/normies

    Paginated 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}/traits

    Trait 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-holders

    Recursive-burn leaderboard at a block number. Query: limit 1–200, optional wallet.

  • GET/rarity/listings/stream

    Server-Sent Events for listing changes: listed, sold, cancelled.

  • GET/rarity/legendary

    Rarity-app Legendary Canvas curation config with current and upcoming arrays.

  • PUT/rarity/admin/legendary

    Admin-only save for Legendary Canvas curation config. Requires x-admin-key.

Smart Contracts

Ethereum mainnet.

Normies

0x9Eb6E2025B64f340691e424b7fe7022fFDE12438

Core ERC721C token with ERC-2981 royalties.

NormiesStorage

0x1B976bAf51cF51F0e369C070d47FBc47A706e602

SSTORE2 bitmap and trait storage with XOR encryption.

NormiesRenderer

0xBe57fC4D0c729b8e8d33b638Dd441F57365e4c25

V1 renderer: animated noise before the reveal, static SVG after.

NormiesRendererV2

0x7818f24d3239c945510e0a1a523dd9971812c6c0

V2 renderer: static noise before the reveal.

NormiesRendererV3

0x1af01b902256d77cf9499a14ef4e494897380b05

V3 renderer: run-length SVG, Pixel Count trait, canvas animation URL.

NormiesRendererV4

0x8eC46Cc1f306652868a4dfbAAae87CBa2715A0eB

V4 Canvas-aware renderer: composited SVG and the Canvas traits.

NormiesRendererV5

0x7c726f02C5e840e1656b522A5C22caaf87C1C35C

V5 renderer: V4 plus the Zombie metadata and art.

NormiesRendererV6

0xd6747533697878a6a3a29B5cCf815740BA23998D

Renders any canvas size and adds the Canvas Size and Blank Canvas traits.

NormiesMinter

0xC74994dD70FFb621CC514cE18a4F6F52124e296d

V1 minting with EIP-191 signatures.

NormiesMinterV2

0xc513272597d3022D77b3d7EEBA92cea5D7fb2808

V2 minting with delegate.xyz V1 and V2 cold wallet delegation.

NormiesCanvas

0x64951d92e345C50381267380e2975f66810E869c

The original canvas: burns, edits and delegation. Paused.

NormiesCanvasStorage

0xC255BE0983776BAB027a156681b6925cde47B2D1

SSTORE2 storage for the original canvas’s edit layers.

NormiesCanvasV2

0xF14f2852e1fD6A4108156054AF49B3915dc40E2e

The canvas: burns, painting, pixel moves, bigger and blank canvases.

NormiesCanvasStorageV2

0x96F2DA32Bb9D429d59ac13dB469f4950cBe02084

Edit layers of any size, plus wallet and per-Normie pixel balances and allowances.

NormiesPixelMarket

0x86156A8d6e4B9925F7fEca527ea5D71B0deeDB64

The sell-side #PIXEL order book.

NormiesRevenuePool

0x481384812e79bf0d11FC0b1704af445D5F06813c

Holds the revenue share and pays epochs against Merkle proofs.

NormiesRoyaltySplitter

0xA68A225f62772E6158f2B5f8afC184AdB69c3282

Royalty receiver: half to the team, half to the revenue pool.

NormiesZombie

0x18533ad55a54c3847Da06A48b51aD7DcB2551202

Merkle-gated commit-reveal converter that turned 21 Humans into Zombies.

NormiesZombieStorage

0xA331bD22C90D1DA096934Db8bc6b69F0e1491E26

SSTORE2 storage for the Zombie pool and conversion records.

NormiesLegendaryCanvas

0xfA55f6592522dA74224a67c7D3Fd1DF759c628e8

Owner-managed registry of Legendary Canvas artist traits.

Adapter8004

0xde152AfB7db5373F34876E1499fbD893A82dD336

Binds a Normie to an ERC-8004 agent identity.

delegate.xyz V2

0x00000000000000447e69651d841bD8D104Bed493

Delegation registry read for minting and painting rights.

delegate.xyz V1

0x00000000000076A84feF008CDAbe6409d2FE638B

The older delegation registry, read alongside V2.

Status Codes

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.

200Success
400Invalid token, address, query, or body
401Invalid admin key
403Admin disabled
404Not found or not indexed
410Burned token on rarity detail
502Upstream indexer, RPC, or provider failure