Public API for To Be a Machine. Questions? Reach out to @ripe0x
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.
Project overview: supply, lock rate, editions, mint state, secondary market floors, and participation stats.
curl https://api.tbam.ripe.wtf/v0/collection
{
"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
}
}
Current mint price, window status, and supply. Cached 12 seconds. Use this for mint frontends.
curl https://api.tbam.ripe.wtf/v0/contract/state
{
"currentMintPrice": 0.01,
"totalSupply": "3484",
"isMachineOpen": true,
"isFirstRun": false,
"windowTimeRemaining": "3840",
"currentWindowStartedAt": "1775489579",
"currentWindowId": "872",
"windowDuration": "4140",
"queueLength": "246",
"mintWindowClosesAt": "1775493719",
"serverTimestamp": 1775489890
}
Paginated token list. Filter by owner, lock status, and sort order.
curl "https://api.tbam.ripe.wtf/v0/tokens?settled=true&limit=2&sort=lockTime"
{
"tokens": [
{
"id": "3483",
"owner": "0xf6ec...b0f3",
"mintBlock": "24815649",
"mintTimestamp": "1775418479",
"settled": true,
"lockBlock": "24815710",
"settledAt": "1775419571"
}
],
"total": 1746,
"limit": 2,
"offset": 0,
"hasMore": true
}
Token detail: owner, ENS name, mint/lock block data.
curl https://api.tbam.ripe.wtf/v0/token/1/info
{
"id": "1",
"owner": "0x1682...5310",
"ownerEns": "tobeamachine.eth",
"mintBlock": "24522275",
"mintBlockHash": "0x59f7...842f",
"mintTimestamp": "1771882115",
"settled": true,
"lockBlock": "24522782",
"lockBlockHash": "0x5ce5...f399",
"settledAt": "1771888391"
}
Computed traits split into token DNA (constant) and block traits (per-block). Settled tokens are cached immutably.
curl https://api.tbam.ripe.wtf/v0/token/1/traits
{
"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
}
}
Seeds, DNA, and palette data for client-side rendering. For settled tokens, includes an image URL. For live tokens, reflects the current block.
curl https://api.tbam.ripe.wtf/v0/token/1/render-data
{
"tokenId": "1",
"settled": true,
"settledBlock": 24522782,
"settledBlockHash": "0x5ce5...f399",
"paletteSeed": "0x3486...3814",
"renderSeed": "0x0881...7da6",
"calibrationSeed": "0x6a5e...74d6",
"dna": { ... },
"imageUrl": "/v0/token/1/image"
}
dna object contains the full computed DNA including vocabulary, palette colors, and contract traits. See the Swagger spec for the full schema.Settled token PNG. Returns 403 for unsettled tokens.
curl -o token1.png https://api.tbam.ripe.wtf/v0/token/1/image
Self-contained HTML page that renders the full artwork in a browser. Works for both live and settled tokens. Embed via iframe.
<iframe src="https://api.tbam.ripe.wtf/v0/token/1/live"
width="512" height="512" style="border:none"></iframe>
Render the artwork at a specific block. Block must be ≥ mint block. For settled tokens, always renders the settled frame regardless of block parameter.
curl https://api.tbam.ripe.wtf/v0/token/1/live/24522782
Paginated edition list. Filter by open/closed status.
curl "https://api.tbam.ripe.wtf/v0/editions?open=true&limit=2"
{
"editions": [
{
"id": "3038",
"printer": "0x5c70...f8e",
"openUntil": "1775574923",
"isOpen": true,
"startBlock": "24821465",
"startTimestamp": "1775488523",
"totalMinted": "0"
}
],
"total": 5,
"limit": 2,
"offset": 0,
"hasMore": true
}
Single edition detail. Same shape as list items.
curl https://api.tbam.ripe.wtf/v0/editions/3038
Unified activity feed: mints, settlements, edition mints, and editions closing. Filterable by type and actor address.
curl "https://api.tbam.ripe.wtf/v0/activity/feed?type=settle&limit=3"
{
"events": [
{
"type": "settle",
"timestamp": "1775419571",
"block": "24815710",
"actor": "0xf6ec...b0f3",
"actorEns": "collector.eth",
"tokenId": "3483"
}
],
"limit": 3,
"offset": 0,
"hasMore": true
}
Collector profile: tokens held, editions created, editions collected. Accepts 0x addresses only (resolve ENS client-side).
curl https://api.tbam.ripe.wtf/v0/address/0x16825261f0466ff1c69eb7c0faa1cb268e3a5310
{
"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"
}
| Trait | Type | Values |
|---|---|---|
| paletteType | string | Monochrome, Duotone, Triadic, Tetrad, Rich, Spectrum |
| rotation | integer | 0–359 (hue rotation degrees) |
| hueCount | integer | 1–6 |
| Trait | Type | Values |
|---|---|---|
| gridSize | string | 1×1, 3×3, 4×4, 6×6, 8×8, 12×12, 16×16, 24×24 |
| border | boolean | true, false |
| substrate | string | pure, tinted |
| pixelBias | string | uniform, small-biased, large-biased, extremes |
| flowMode | string | full, mixed, none |
| ditherMethod | string | floyd-steinberg, ordered, mixed |
| blendMode | string | Multiply, Hard Light, Screen |
| isBlackWhite | boolean | true (0.5% chance), false |
| Type | Fields |
|---|---|
| mint | actor, tokenId, timestamp, block |
| settle | actor, tokenId, timestamp, block |
| edition_mint | actor, editionId, amount, totalPaid, timestamp, block |
| edition_closing | editionId, timeRemaining, totalMinted, timestamp |
| Limit | Window |
|---|---|
| 60 requests per IP | Sliding 60 seconds |
All responses include headers: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset. On 429 responses, Retry-After indicates seconds until the window resets.
| Status | Meaning |
|---|---|
| 400 | Invalid parameters (bad address format, invalid token ID, block out of range) |
| 403 | Token not settled (image/thumbnail endpoints only) |
| 404 | Token, edition, or block not found |
| 429 | Rate limit exceeded |
| 503 | Indexer or contract state unavailable |
| Contract | Description | Address |
|---|---|---|
| Machine | ERC-721A. Minting, settling, and token ownership. | 0xc392...7263 |
| Editions | ERC-1155. Open editions created when tokens are settled. 24-hour mint windows priced by gas. | 0x324c...1152 |
| Renderer | On-chain renderer. Generates tokenURI with embedded HTML/JS artwork. | 0xAd7b...219a |