MLXDocs
Network API

Stats and supply

Markdown

Three summary endpoints. /api/stats is the chain head and the ledger's running totals, /api/supply is the allocation and what each protocol account has paid out, and /api/token is everything the token page shows.

GET /api/stats

GEThttps://mlx.app/api/stats

The chain, its newest block, the ledger's running totals, how much MLX Macs have mined, the live spot spread and what the spot market can pay sellers right now. Not cached (no-store).

curl https://mlx.app/api/stats

No parameters.

Response
{
  "chain": "mlx-1",
  "network": "genesis",
  "storage": "redis",
  "sequencer": "92114fe09a90d1a3aced63f35463e4120969d1b323c41070a9ee3ca3cf6ae9a3",
  "head": {
    "height": 397,
    "hash": "ef5f250abbe3aa7f14767ea19ce5b1b67525fff8a8c039f0e72d5a7d33d04601",
    "ts": 1793113786120
  },
  "stats": {
    "accounts": 61,
    "nodes": 12,
    "tiers": { "S": 2, "M": 1, "L": 0, "SX": 2, "MX": 0, "LX": 0, "N": 6, "T": 1 },
    "devices": { "iphone": 0, "ipad": 0, "mac": 12, "other": 0 },
    "chips": { "M6": 2, "M5": 2, "M4 Pro": 1, "M4": 6, "M1": 1 },
    "countries": { "SE": 3, "SG": 2, "CH": 4, "JP": 1, "TR": 1, "MY": 1 },
    "txs": 398,
    "emitted": "0",
    "referralPaid": "0",
    "raisedUSDC": "2650180696",
    "units": 27.020000000000003,
    "deposited": "1260277511",
    "swapped": "4159614206",
    "updated": 1793113786120,
    "adjustedIn": "11000000000",
    "spotBuyUsd": "52000000",
    "withdrawRequested": "1000000000",
    "withdrawPaid": "1000000000"
  },
  "mined": {
    "allocated": "3500000000000000",
    "remaining": "3499999508244581",
    "paid": "491755419"
  },
  "pool": null,
  "market": { "buyPremium": 0.25, "sellDiscount": 0.2 },
  "liquidity": { "usd": "1677000000", "mlx": "1499995840385794" }
}
FieldTypeNotes
chainstringChain id, mlx-1 on production. Part of every signed transaction and block hash.
networkstringgenesis on the public chain.
storagestringredis in production; memory on a local development server.
sequencerstringThe sequencer's Ed25519 public key (hex). Every block is signed with it: see Blocks.
headobjectThe newest block: height, hash, ts.
stats.accountsnumberWallets created.
stats.nodesnumberDedicated seats sold or granted.
stats.tiersobjectSeats per tier id (N Nano, T Lite, S Core, M Pro, L Ultra; SX, MX, LX the newest-chip editions). See Seats.
stats.devices, stats.chips, stats.countriesobjectSeats by the device, chip and country recorded when each was bought.
stats.txsnumberTransactions sealed, the genesis transaction included.
stats.emittedstringMLX paid to seats up front, base units. Seats now mine instead and get nothing up front, so this no longer grows. Mined MLX is mined.
stats.referralPaidstringMLX paid as referral bonuses, base units.
stats.raisedUSDCstringDollars paid for seats, base units.
stats.unitsnumberThe network's position on the curve, in seat units. See Curve.
stats.depositedstringDollars deposited and credited as USDC, base units.
stats.swappedstringMLX bought on the spot market, base units.
stats.soldstringMLX sold back to the spot market, base units. Absent until the first sale.
stats.spotBuyUsd, stats.spotSellUsdstringDollars spent buying and paid out for selling on the spot market, base units.
stats.commissionPaidstringUSDC paid to distributors, base units.
stats.adjustedIn, stats.adjustedOutstringUSDC credited and debited by operator balance adjustments (the public adjust transaction), base units.
stats.withdrawRequested, stats.withdrawPaidstringUSDC asked for and paid out by withdrawals, base units.
stats.updatednumberTime of the block that last changed the totals.
minedobjectThe compute pool (compute.mlx): allocated, remaining and paid (allocated less remaining), base units. This is all the MLX Macs have mined. Itemised at /api/compute.
poolobject or nullBalances of pool.mlx; null when that account doesn't exist.
marketobjectThe live spot spread, as fractions: buyPremium on buys, sellDiscount on sells. The code defaults are 3% and 20%; this field is what applies now.
liquidityobjectWhat treasury.mlx holds, base units: usd (USDC) is what sells can be paid from, mlx is what buys are filled from.

The stats fields marked optional in the ledger (sold, spotBuyUsd, spotSellUsd, commissionPaid, adjustedIn, adjustedOut, withdrawRequested, withdrawPaid) appear once the first transaction of that kind is sealed.

GET /api/supply

GEThttps://mlx.app/api/supply

The fixed supply, how it was allocated at genesis, how much each allocation has paid out, and the protocol accounts themselves. Not cached.

No parameters.

Response
{
  "total": 10000000000,
  "allocation": [
    {
      "account": "compute.mlx",
      "label": "Compute rewards",
      "share": 0.35,
      "note": "Earned by Macs for verified AI work, hour by hour. Each day's rewards unlock 30 days later on a free seat, or after the seat's lock-in (3 to 20 days) with a dedicated seat."
    }
  ],
  "paid": [
    {
      "account": "compute.mlx",
      "allocated": "3500000000000000",
      "movedIn": "0",
      "movedOut": "0",
      "moves": [],
      "holds": "3499999508244581",
      "locked": "0",
      "paidOut": "491755419",
      "remaining": "3499999508244581",
      "paid": "491755419"
    }
  ],
  "system": [
    {
      "name": "compute.mlx",
      "pk": null,
      "nonce": 0,
      "bal": { "MLX": "3499999508244581", "USDT": "0", "USDC": "0" },
      "created": 1792312766202,
      "createdHeight": 0,
      "nodes": [],
      "earned": "0",
      "referrals": 0,
      "system": true
    }
  ],
  "stats": { "accounts": 61, "nodes": 12, "txs": 398 }
}

Each array is trimmed to one entry here, and stats to three fields; the live response lists every allocation and protocol account, and the full stats object from /api/stats.

FieldTypeNotes
totalnumberTotal supply in whole MLX (10,000,000,000), not base units.
allocationarrayThe genesis split: account, label, share (a fraction of total) and a plain-language note. The table is on Parameters.
paidarrayPer allocation, base units: allocated at genesis; movedIn and movedOut, MLX moved between protocol accounts, with each move in moves (from, to, amount, at, tx; so far only the seat reserve's move to treasury.mlx on 29 Oct 2026); holds, what the account holds now, locks included (team.mlx vests in locks), with locked the part still locked and nextUnlock when the next lock opens; and paidOut, what it has paid out to people, net: allocated + movedIn − movedOut − holds (for treasury.mlx, MLX sold on spot less MLX sold back). remaining and paid repeat holds and paidOut.
systemarrayThe protocol accounts in full (the allocation accounts plus pool.mlx, faucet.mlx, bridge.mlx and withdrawals.mlx where they exist), in the account format of Accounts. bridge.mlx also carries issued: USDC issued for deposits and liquidity, base units.
statsobjectThe same totals as /api/stats.

GET /api/token

GEThttps://mlx.app/api/token

Everything the token page on mlx.app shows, computed from the live ledger: price, spread, supply, holders, the next halving, history and recent buys and sells. Cached by the CDN for a few seconds, and in the server for a few more, so two calls close together can return the same at.

No parameters.

Response
{
  "chain": "mlx-1",
  "at": 1793116774568,
  "position": 27.020000000000003,
  "price": 0.01000093648568847,
  "buyPrice": 0.012501170607110588,
  "sellPrice": 0.008000749188550777,
  "market": { "buyPremium": 0.25, "sellDiscount": 0.2 },
  "change": { "d1": 3.465735964880423e-8, "d7": 0.00008065092656917017, "d30": null },
  "marketCap": 46.5180521910856,
  "fdv": 100009364.8568847,
  "volume": { "d1": 1, "d7": 52, "all": 52 },
  "supply": {
    "total": 10000000000,
    "circulating": 4651.369625,
    "unlocked": 4159.614206,
    "locked": 491.7554189999999,
    "protocol": [
      { "account": "compute.mlx", "label": "Compute rewards", "share": 0.35, "allocated": 3500000000, "remaining": 3499999508.244581 }
    ]
  },
  "paidToNodes": 0,
  "paidToMacs": 491.7554187774658,
  "referralPaid": 0,
  "nodes": 12,
  "tiers": { "S": 2, "M": 1, "L": 0, "SX": 2, "MX": 0, "LX": 0, "N": 6, "T": 1 },
  "holders": {
    "count": 39,
    "top": [{ "name": "luca.mlx", "mlx": 98.999505, "locked": 98.999505 }]
  },
  "liquidity": { "usd": 1677, "mlx": 1499995840.385794 },
  "halving": {
    "epoch": 0,
    "nextAt": 200000,
    "usdToNext": 19997298,
    "progress": 0.0001351,
    "priceNext": 0.02,
    "rewardNow": 24997.55071132855,
    "rewardNext": 12499.945847986279
  },
  "ath": { "price": 0.01000093648568847, "at": 1793102873526 },
  "atl": { "price": 0.01, "at": 1792312766202 },
  "range": { "d1": [0.01000093613908243, 0.01000093648568847], "d7": [0.010000129965940905, 0.01000093648568847] },
  "since": 1792312766202,
  "ticks": [
    { "t": 1792312766202, "u": 0, "n": 0, "e": 0, "v": 0 },
    { "t": 1792510129015, "u": 3.75, "n": 1, "e": 37499.756316, "v": 0 }
  ],
  "activity": [
    {
      "hash": "a7ebe211a3e39fb634f1b5ff313d9a54e53520bd6d3237f42be39f4f631d4137",
      "t": 1793102872897,
      "kind": "buy",
      "who": "luca.mlx",
      "mlx": 79.99251,
      "usd": 1,
      "note": "Bought on the curve"
    }
  ]
}

supply.protocol, holders.top, ticks and activity are trimmed to one or two entries here.

FieldTypeNotes
positionnumberThe network's place on the curve, in seat units (same as stats.units).
pricenumberThe curve price, dollars per MLX.
buyPrice, sellPricenumberprice with the live buy premium and sell discount applied. A real fill also moves along the curve: ask /api/market/quote for an exact figure.
changeobjectPrice change over 1, 7 and 30 days as a fraction; null when the chain is younger than the period.
marketCapnumberCirculating MLX × price, dollars.
fdvnumberTotal supply × price, dollars.
volumeobjectSpot buys plus sells in dollars over the last day, the last 7 days and all time.
supply.circulatingnumberMLX outside the protocol accounts, locked or not.
supply.unlocked, supply.lockednumbercirculating split by whether it can be spent today.
supply.protocolarrayPer allocation account: allocated and remaining, whole MLX.
paidToNodesnumberMLX paid to seats up front (the old model; see stats.emitted).
paidToMacsnumberMLX mined by Macs: what compute.mlx has paid out.
holdersobjectcount of wallets holding any MLX and the top holders by MLX held (mlx includes locked).
liquidityobjecttreasury.mlx's USDC and MLX, whole units.
halvingobjectCurrent epoch, the position of the next halving (nextAt), dollars of seat purchases still to go (usdToNext), progress through the epoch as a fraction and the curve price there (priceNext). rewardNow and rewardNext are the up-front MLX a Core seat was granted under the old model, at today's position and at the next halving; seats bought today are granted nothing up front.
ath, atlobjectHighest and lowest curve price reached, with the time.
rangeobjectLowest and highest price over the last day and 7 days, [low, high].
sincenumberTime of the genesis block.
ticksarrayPrice history: one point per block that moved the curve. t time, u position, n seats, e MLX paid to seats up front (cumulative), v spot volume in dollars (cumulative).
activityarrayThe newest buys, sells and seat purchases from the recent transactions. kind is buy, sell or node; seat rows also carry tier, node (the seat id) and granted.

Errors

StatusWhen
500The ledger couldn't be read. /api/token cuts the message to a short line.

All three endpoints take no input, so they have no 400 or 404.