the block / api

Take the data.

The whole board is public JSON. No key, no signup. Build the leaderboard we didn’t build, the bot that tweets every eviction, the counter that shames your team into buying a tile.

BASEhttps://tilesquat.com/api/v1
AUTHnone
CORS*
CACHE10s at the edge

Endpoints

GET/api/v1/statsSold count, phase, floor price, total taken, hottest tile.
GET/api/v1/boardEvery tile, hottest first. status=owned|open|all, limit≤250, offset.
GET/api/v1/tiles/{slug}One tile plus its last 20 changes of hands.
GET/badge/{slug}.svgLive rank badge, sized for a footer.
GET/og/t/{slug}.png1200×630 card for link previews.

Everything is a plain GET. Nothing here writes — buying still goes through the checkout, and it always will.

Try it

curl https://tilesquat.com/api/v1/stats
{
  "generated_at": "2026-08-23T09:14:02.000Z",
  "phase": "subscription",
  "sold_count": 247,
  "open_count": 753,
  "total_tiles": 1000,
  "squatters": 118,
  "floor_price_cents": 1500,
  "tiles_until_next_tier": 53,
  "total_paid_cents": 412300,
  "sold_out_at": null,
  "half_life_days": 3,
  "hottest": {
    "slug": "0000",
    "anchor": "Acme",
    "heat_cents": 34920,
    "page_url": "https://tilesquat.com/t/0000"
  }
}
curl "https://tilesquat.com/api/v1/board?status=owned&limit=5"

Returns tiles[], hottest first, each shaped like this:

{
  "id": 42,
  "slug": "0000",
  "status": "owned",
  "rank": 1,
  "anchor": "Acme",
  "target_url": "https://acme.example",
  "logo_url": "https://tilesquat.com/logo/u/01HXXX/128.webp",
  "page_url": "https://tilesquat.com/t/0000",
  "badge_url": "https://tilesquat.com/badge/0000.svg",
  "heat_cents": 34920,
  "price_cents": 52380,
  "lifetime_paid_cents": 61000,
  "steals": 2,
  "block": null,
  "owner": "h_9f2c1a",
  "claimed_at": "2026-08-21T18:03:11.000Z"
}

Fields worth explaining

heat_cents
What the tile is worth right now. Halves every 3 days.
price_cents
What it costs you to take it, this second. 1.5× heat, floor-clamped.
rank
Position on the board. 1 is top-left. null for unsold tiles.
block
Tiles bought in one order share a block id. null if bought alone.
owner
A public handle. We never expose emails or internal ids.
target_url
The advertiser’s link. Every link we render to it carries rel="sponsored".

Money is always integer cents. Times are always UTC ISO 8601. Heat is computed at request time, so two calls a minute apart return different numbers for a tile nobody touched — that’s the decay, working.

Put the badge on your site

It renders your live rank and links back. Squatters who ship this tend to keep their tile longer, which is not a coincidence.

<a href="https://tilesquat.com/t/0000">
  <img src="https://tilesquat.com/badge/0000.svg" alt="tilesquat rank" width="150" height="28">
</a>

Fair use

Responses are cached for 10 seconds — polling faster than that just gets you the same bytes. One request every 10 seconds is plenty for anything real time. Hammer it and we’ll start rate limiting, which nobody enjoys. Attribution isn’t required, but a link back is how this stays free.

Anything that breaks or reads wrong: the tile owner behind that slug is not the person to ask — write to us instead.

SQUAT A TILEor just read the rules