TBAM API

Public API for To Be a Machine. Questions? Reach out to @ripe0x

Overview

Base URL: https://api.tbam.ripe.wtf/v0

All responses are JSON. Prices are in ETH (numbers). Timestamps are unix seconds (strings). CORS is open to all origins.

Each TBAM token has two types of traits: token DNA (constant, derived from the token's mint hash) and block traits (change every Ethereum block for live tokens, permanent once settled). The calibration seed is a global constant set when Token 0 was settled.

Collection
GET /v0/collection

Project overview: supply, lock rate, editions, mint state, secondary market floors, and participation stats.

Example
curl https://api.tbam.ripe.wtf/v0/collection
Response
{
  "supply": { "total": 3484, "settled": 1746, "live": 1738 },
  "lockRate": 50.1,
  "editions": { "total": 1747, "open": 5, "totalCopiesMinted": 478268 },
  "participants": {
    "uniqueCollectors": 745,
    "uniqueSettlers": 499,
    "uniqueEditionMinters": 505,
    "total": 1106
  },
  "totalEditionRevenue": 1.354,
  "launchedAt": 1771736171,
  "mintState": {
    "isOpen": true,
    "isFirstRun": false,
    "currentPrice": 0.01,
    "currentWindowId": "872",
    "windowClosesAt": "1775493719",
    "queueLength": "246"
  },
  "secondary": {
    "floorPrice": 0.0046,
    "settledFloorPrice": 0.0046,
    "unsettledFloorPrice": 0.01
  }
}
GET /v0/contract/state

Current mint price, window status, and supply. Cached 12 seconds. Use this for mint frontends.

Example
curl https://api.tbam.ripe.wtf/v0/contract/state
Response
{
  "currentMintPrice": 0.01,
  "totalSupply": "3484",
  "isMachineOpen": true,
  "isFirstRun": false,
  "windowTimeRemaining": "3840",
  "currentWindowStartedAt": "1775489579",
  "currentWindowId": "872",
  "windowDuration": "4140",
  "queueLength": "246",
  "mintWindowClosesAt": "1775493719",
  "serverTimestamp": 1775489890
}
Tokens
GET /v0/tokens

Paginated token list. Filter by owner, lock status, and sort order.

Parameters
limitMax results (1-100). Default: 20
offsetSkip N results. Default: 0
ownerFilter by owner address (0x...)
settledFilter by settled status: true or false
sortSort by: id, mintTime, lockTime. Default: id
Example
curl "https://api.tbam.ripe.wtf/v0/tokens?settled=true&limit=2&sort=lockTime"
Response
{
  "tokens": [
    {
      "id": "3483",
      "owner": "0xf6ec...b0f3",
      "mintBlock": "24815649",
      "mintTimestamp": "1775418479",
      "settled": true,
      "lockBlock": "24815710",
      "settledAt": "1775419571"
    }
  ],
  "total": 1746,
  "limit": 2,
  "offset": 0,
  "hasMore": true
}
GET /v0/token/:id/info

Token detail: owner, ENS name, mint/lock block data.

Example
curl https://api.tbam.ripe.wtf/v0/token/1/info
Response
{
  "id": "1",
  "owner": "0x1682...5310",
  "ownerEns": "tobeamachine.eth",
  "mintBlock": "24522275",
  "mintBlockHash": "0x59f7...842f",
  "mintTimestamp": "1771882115",
  "settled": true,
  "lockBlock": "24522782",
  "lockBlockHash": "0x5ce5...f399",
  "settledAt": "1771888391"
}
GET /v0/token/:id/traits

Computed traits split into token DNA (constant) and block traits (per-block). Settled tokens are cached immutably.

Example
curl https://api.tbam.ripe.wtf/v0/token/1/traits
Response
{
  "id": "1",
  "settled": true,
  "tokenTraits": {
    "paletteType": "Monochrome",
    "rotation": 109,
    "hueCount": 1
  },
  "blockTraits": {
    "gridSize": "4×4",
    "border": false,
    "substrate": "pure",
    "pixelBias": "uniform",
    "flowMode": "mixed",
    "ditherMethod": "floyd-steinberg",
    "blendMode": "Screen",
    "isBlackWhite": false
  }
}
GET /v0/token/:id/render-data

Seeds, DNA, and palette data for client-side rendering. For settled tokens, includes an image URL. For live tokens, reflects the current block.

Example
curl https://api.tbam.ripe.wtf/v0/token/1/render-data
Response (settled)
{
  "tokenId": "1",
  "settled": true,
  "settledBlock": 24522782,
  "settledBlockHash": "0x5ce5...f399",
  "paletteSeed": "0x3486...3814",
  "renderSeed": "0x0881...7da6",
  "calibrationSeed": "0x6a5e...74d6",
  "dna": { ... },
  "imageUrl": "/v0/token/1/image"
}
The dna object contains the full computed DNA including vocabulary, palette colors, and contract traits. See the Swagger spec for the full schema.
Images & Rendering
GET /v0/token/:id/image

Settled token PNG. Returns 403 for unsettled tokens.

Parameters
sizeOutput size in pixels (200-2000). Default: 1536
Example
curl -o token1.png https://api.tbam.ripe.wtf/v0/token/1/image
GET /v0/token/:id/live

Self-contained HTML page that renders the full artwork in a browser. Works for both live and settled tokens. Embed via iframe.

Embed
<iframe src="https://api.tbam.ripe.wtf/v0/token/1/live"
  width="512" height="512" style="border:none"></iframe>
For settled tokens, this always renders the settled frame. The response is immutably cached.
GET /v0/token/:id/live/:blockNumber

Render the artwork at a specific block. Block must be ≥ mint block. For settled tokens, always renders the settled frame regardless of block parameter.

Example
curl https://api.tbam.ripe.wtf/v0/token/1/live/24522782
Editions
GET /v0/editions

Paginated edition list. Filter by open/closed status.

Parameters
limitMax results (1-100). Default: 20
offsetSkip N results. Default: 0
openFilter: true (open only) or false (closed only)
Example
curl "https://api.tbam.ripe.wtf/v0/editions?open=true&limit=2"
Response
{
  "editions": [
    {
      "id": "3038",
      "printer": "0x5c70...f8e",
      "openUntil": "1775574923",
      "isOpen": true,
      "startBlock": "24821465",
      "startTimestamp": "1775488523",
      "totalMinted": "0"
    }
  ],
  "total": 5,
  "limit": 2,
  "offset": 0,
  "hasMore": true
}
GET /v0/editions/:id

Single edition detail. Same shape as list items.

Example
curl https://api.tbam.ripe.wtf/v0/editions/3038
Activity
GET /v0/activity/feed

Unified activity feed: mints, settlements, edition mints, and editions closing. Filterable by type and actor address.

Parameters
limitMax results (1-50). Default: 20
offsetSkip N results. Default: 0
typeFilter: mint, settle, edition_mint, edition_closing
actorFilter by actor address (0x...)
Example
curl "https://api.tbam.ripe.wtf/v0/activity/feed?type=settle&limit=3"
Response
{
  "events": [
    {
      "type": "settle",
      "timestamp": "1775419571",
      "block": "24815710",
      "actor": "0xf6ec...b0f3",
      "actorEns": "collector.eth",
      "tokenId": "3483"
    }
  ],
  "limit": 3,
  "offset": 0,
  "hasMore": true
}
Address
GET /v0/address/:address

Collector profile: tokens held, editions created, editions collected. Accepts 0x addresses only (resolve ENS client-side).

Example
curl https://api.tbam.ripe.wtf/v0/address/0x16825261f0466ff1c69eb7c0faa1cb268e3a5310
Response
{
  "address": "0x1682...5310",
  "ens": "tobeamachine.eth",
  "tokens": {
    "held": ["3383", "3349", "3345", ...],
    "settled": ["3345", "3341", "3340", ...],
    "count": 214,
    "settledCount": 25
  },
  "editions": {
    "created": [
      { "id": "857", "totalMinted": "98", "openUntil": "1774931615" }
    ],
    "collected": [
      { "editionId": "3442", "quantity": 200, "totalPaid": 0.000952 }
    ]
  },
  "firstActivity": "1771882115",
  "lastActivity": "1774845215"
}
Reference

Token DNA Traits (constant per token)

TraitTypeValues
paletteTypestringMonochrome, Duotone, Triadic, Tetrad, Rich, Spectrum
rotationinteger0–359 (hue rotation degrees)
hueCountinteger1–6

Block Traits (change every block for live tokens)

TraitTypeValues
gridSizestring1×1, 3×3, 4×4, 6×6, 8×8, 12×12, 16×16, 24×24
borderbooleantrue, false
substratestringpure, tinted
pixelBiasstringuniform, small-biased, large-biased, extremes
flowModestringfull, mixed, none
ditherMethodstringfloyd-steinberg, ordered, mixed
blendModestringMultiply, Hard Light, Screen
isBlackWhitebooleantrue (0.5% chance), false

Activity Event Types

TypeFields
mintactor, tokenId, timestamp, block
settleactor, tokenId, timestamp, block
edition_mintactor, editionId, amount, totalPaid, timestamp, block
edition_closingeditionId, timeRemaining, totalMinted, timestamp
Rate Limits & Errors
LimitWindow
60 requests per IPSliding 60 seconds

All responses include headers: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset. On 429 responses, Retry-After indicates seconds until the window resets.

Error Responses

StatusMeaning
400Invalid parameters (bad address format, invalid token ID, block out of range)
403Token not settled (image/thumbnail endpoints only)
404Token, edition, or block not found
429Rate limit exceeded
503Indexer or contract state unavailable
Contracts
ContractDescriptionAddress
MachineERC-721A. Minting, settling, and token ownership.0xc392...7263
EditionsERC-1155. Open editions created when tokens are settled. 24-hour mint windows priced by gas.0x324c...1152
RendererOn-chain renderer. Generates tokenURI with embedded HTML/JS artwork.0xAd7b...219a