MLXDocs
Network API

Seats

Markdown

Every dedicated seat on the network, newest first or filtered by tier, device, country, chip and owner, and one seat by its number.

A dedicated seat is what people buy (or are granted) to mine at a seat's rate; a Mac without one runs on a free seat, which has no record here. What each seat earns is on Seats. The API keeps the older word "node": the paths are /api/nodes and /api/node/{id}, the records sit under nodes, and a seat's number is its id.

GET /api/nodes

GEThttps://mlx.app/api/nodes?limit=2

Without filters: seats newest first, paged by id. With any of tier, device, country, chip, q, sort or offset: a filtered, sorted list with match counts.

curl "https://mlx.app/api/nodes?tier=S&sort=old&limit=10"

Newest first

ParameterTypeNotes
limitintegerHow many seats. The route has a default and a maximum, and clamps anything outside it.
beforeintegerStart below this id, for the next page: pass the last id you got.
Response
{
  "total": 12,
  "nodes": [
    {
      "id": 2,
      "owner": "luca.mlx",
      "tier": "S",
      "reward": "0",
      "base": 24999.566786837695,
      "position": 3.75,
      "device": { "class": "mac", "chip": "M5", "appleSilicon": true, "cores": 8, "screen": "1800x1169@2", "model": "MacBook" },
      "country": "SE",
      "height": 80,
      "tx": "e74fb256b0faa50d1863fa8064e49540f74543c56a9c5d0aecec88cda6eacae7",
      "ts": 1792519094698,
      "status": "pledged",
      "unlockAt": 1793383094698
    }
  ]
}

nodes is trimmed to one seat here. total is the number of seats on the ledger.

Filtered

ParameterTypeNotes
tierN, T, S, M, L or starterNano, Lite, Core, Pro, Ultra, or both starter seats (Nano and Lite). S, M and L also match their newest-chip editions (SX, MX, LX).
devicemac, iphone, ipad or otherThe device class recorded at purchase.
countrystringTwo-letter country code recorded at purchase.
chipstringExact chip recorded at purchase, such as M4 Pro.
qstring#12 or 12 for one seat; a full wallet name (luca.mlx) for that owner's seats; any other text matches owner names, device models and chips.
sortnew, old or rewardNewest first (default), oldest first, or largest up-front reward first.
offsetintegerRows to skip. Pass the previous page's next.
limitintegerPage size.
Response (GET /api/nodes?tier=S&limit=1)
{
  "total": 12,
  "matched": 4,
  "capped": false,
  "offset": 0,
  "nodes": [
    {
      "id": 2,
      "owner": "luca.mlx",
      "tier": "S",
      "reward": "0",
      "base": 24999.566786837695,
      "position": 3.75,
      "device": { "class": "mac", "chip": "M5", "appleSilicon": true, "cores": 8, "screen": "1800x1169@2", "model": "MacBook" },
      "country": "SE",
      "height": 80,
      "tx": "e74fb256b0faa50d1863fa8064e49540f74543c56a9c5d0aecec88cda6eacae7",
      "ts": 1792519094698,
      "status": "pledged",
      "unlockAt": 1793383094698
    }
  ],
  "next": 1
}
FieldTypeNotes
totalintegerSeats on the ledger.
matchedintegerSeats that pass the filter.
cappedbooleantrue when the ledger holds more seats than a filtered query reads (it reads the newest ones).
nextinteger or nullThe offset of the next page.

The filtered list is cached on each server for a few seconds, so a seat bought a moment ago can take a little while to appear in it; the unfiltered list reads the ledger directly.

GET /api/node/{id}

GEThttps://mlx.app/api/node/2

One seat, as { "node": … }.

ParameterTypeNotes
idinteger (path)The seat's number (#2 is 2). Seats are numbered from 1.
Response
{
  "node": {
    "id": 2,
    "owner": "luca.mlx",
    "tier": "S",
    "reward": "0",
    "base": 24999.566786837695,
    "position": 3.75,
    "device": { "class": "mac", "chip": "M5", "appleSilicon": true, "cores": 8, "screen": "1800x1169@2", "model": "MacBook" },
    "country": "SE",
    "height": 80,
    "tx": "e74fb256b0faa50d1863fa8064e49540f74543c56a9c5d0aecec88cda6eacae7",
    "ts": 1792519094698,
    "status": "pledged",
    "unlockAt": 1793383094698
  }
}

The seat record

FieldTypeNotes
idintegerThe seat's number.
ownerstringThe wallet that holds it.
tierstringN Nano, T Lite, S Core, M Pro, L Ultra, or SX, MX, LX for the newest-chip editions.
rewardstringMLX paid up front, base units. "0" for every seat bought since seats began to mine instead.
returnedstringPresent when an up-front reward granted after that change was given back by seat_reward_return, base units.
basenumberThe up-front reward a Core seat would have had at this point on the curve, whole MLX (the old model's reference figure).
positionnumberThe network's position on the curve, in seat units, when this seat was bought (before its own units were added).
deviceobjectWhat the buyer's browser or app reported at purchase: class (mac, iphone, ipad, other), and when known chip, appleSilicon, cores, memoryGB, screen and model (a kind of device, such as "MacBook").
countrystringTwo-letter country of the purchase, when known.
height, tx, tsThe block, transaction hash and time of the purchase.
statusstringpledged. The record format also allows active, which no seat uses today.
unlockAtintegerWhen the seat's lock-in from purchase ends, ms.
paymentobjectOn a seat paid by crypto checkout: invoice, chain, token, amount, usd, signature (the payment on its own chain), and from and at where known.
grantobjectOn a granted seat: program (builder), ref and an optional note.

Which Mac carries a seat, and at what rate, is worked out each hour from the wallet's linked Macs: see Rewards.

Errors

StatusWhen
404/api/node/{id}: "Seat not found", including an id that isn't a number.
500The ledger couldn't be read.

/api/nodes never answers 400: unknown filter values fall back to their defaults.