MLXDocs
Network API

World

Markdown

The Macs that make up the network as MLX World shows them (every linked Mac seen in the last week, with public fields only and its approximate city), plus the network's totals and its output over the last day.

GET /api/world/network

GEThttps://mlx.app/api/world/network?totals=1

Every Mac linked to a wallet and seen in the last week, and the network's totals. This is the data behind world.mlx.app, the homepage's live map and the explorer's World tab. The response is rebuilt at most every few seconds and cached briefly at the CDN.

curl "https://mlx.app/api/world/network?totals=1"
ParameterTypeNotes
totals1Only chain, at and totals, without the list of Macs.
Response
{
  "chain": "mlx-1",
  "at": 1793116791648,
  "macs": [
    {
      "id": "51f9a4661bf41155",
      "kind": "macbook-pro",
      "art": "macbook-pro",
      "model": "MacBook Pro 16-inch",
      "year": 2024,
      "chip": "M4 Pro",
      "cls": "M",
      "memoryGB": 48,
      "activity": "working",
      "seen": 1793116781269,
      "geo": { "city": "Singapore", "region": "", "country": "SG", "lat": 1.3, "lon": 103.9 },
      "seat": "dedicated"
    }
  ],
  "totals": {
    "macs": 53,
    "online": 15,
    "working": 14,
    "tps": 426,
    "tokensToday": 14805599,
    "countries": 25,
    "cities": 46,
    "placed": 53,
    "freeNodes": 40,
    "freeTflops": 170.5,
    "freeMemGB": 1554
  },
  "capped": false
}

macs is trimmed to one Mac here.

What is published, and what isn't

Each Mac is published with an explicit list of fields. Never its wallet, its own name, its IP address, its key, its work counters or its speed: those stay with the owner. The totals are sums over all Macs, so no single Mac's numbers show.

macs[]

FieldTypeNotes
idstringAn opaque id, stable on this chain, that can't be turned back into the Mac's key.
kindstringmacbook-air, macbook-pro, mac-mini, mac-studio, imac, mac-pro, macbook or mac when unknown.
artstringThe drawing for it: https://mlx.app/macs/<art>.svg.
modelstringThe model, such as "MacBook Pro 16-inch", from Apple's model identifier when MLX Node reports one, otherwise inferred.
yearintegerThe model's year, when known.
chipstringShort chip name, such as M4 Pro.
clsS, M, L or nullThe seat class the chip can carry in full: S Core (base chips), M Pro (Pro and Max), L Ultra.
memoryGBintegerUnified memory the Mac reports.
activitystringworking (running jobs, or waiting between jobs on its seat's rhythm), ready, paused, stopped, busy (calibrating or downloading a model) or offline (no heartbeat for a few minutes).
seenintegerIts last heartbeat, ms.
geoobject or nullApproximate place from the network's edge, rounded (no IP is kept): city, region, country, lat, lon. null when unknown.
seatdedicated or freeWhether its wallet holds a dedicated seat.

totals

FieldTypeNotes
macsintegerMacs listed (linked and seen in the last week).
onlineintegerMacs not offline.
workingintegerMacs whose activity is working.
tpsintegerTokens a second the network produced over the last few minutes, counted from finished jobs. Before that counter has data it falls back to the working Macs' own meters.
tokensTodayintegerAI tokens the Macs report for the current UTC day.
countries, citiesintegerDistinct places among Macs with a geo.
placedintegerMacs with a geo.
freeNodesintegerLinked Macs without a dedicated seat to carry (a wallet's Macs beyond its number of seats, the smallest ones). Each mines on a free seat.
freeTflops, freeMemGBnumberThose Macs: estimated compute by class, and memory as reported.

capped is true when there were more Macs than the list holds; the newest seen are kept.

GET /api/world/series

GEThttps://mlx.app/api/world/series

The network's output, one sample a minute for the last day, oldest first. The sequencer's scheduled run takes each sample from the totals above, so this is real history, not something collected while a page is open.

No parameters.

Response
{
  "samples": [
    { "t": 1793030700000, "tps": 271, "online": 13, "working": 12 },
    { "t": 1793030760000, "tps": 272, "online": 12, "working": 12 }
  ]
}

samples is trimmed to two here.

FieldTypeNotes
tintegerStart of the minute, ms.
tpsintegertotals.tps at that minute.
online, workingintegertotals.online and totals.working at that minute.

A minute the scheduled run missed has no sample, so don't assume the points are evenly spaced.

Errors

StatusWhen
500The data couldn't be read.

Both endpoints ignore parameters they don't know.