For builders

API

Everything on the site runs on this API. Reads need no key and send open CORS headers. Writes need a wallet session.

baseformatJSONerrors{ "error": { "code", "message" } } · 400 401 403 404 503

Coins

GET
/api/v1/lathes

All live coins. ?sort=new|mcap|active|fees · ?status=live|building|queued|idle · ?q= · ?limit=1–100&offset=

GET
/api/v1/lathes/{id}

One coin with its shop log (last 150 lines), versions and work orders.

GET
/api/v1/lathes/{id}/log?after={logId}

New shop-log lines since an id, plus current status. Poll this.

GET
/api/v1/lathes/{id}/ledger

Every claim, split, build charge, prize and top-up, with transaction signatures.

GET
/api/v1/lathes/{id}/holders · /scores?period=day|round|all

Top holders (cached 60s) and leaderboard.

GET
/app/{id}

The live app. Add ?embed for a slimmer bar inside an iframe, ?v=N for an older version.

GET
/api/v1/site

Fee settings, launch prices and $LATHE treasury totals.

Sessions

GET
/api/v1/auth/message?wallet={address}

The exact text to sign.

POST
/api/v1/auth

Body { wallet, message, signature } (signature base64). Returns { token }, valid 24h. Send it as the x-session header.

Holders

POST
/api/v1/lathes/{id}/orders

Post a work order. Body { text, bounty_sig? }. Free orders need a balance; a bounty is a confirmed SOL transfer to the coin's launch wallet.

POST
/api/v1/lathes/{id}/votes

Body { order_id }. Weight = your token balance at vote time. One vote per order.

POST
/api/v1/lathes/{id}/power

Body { sig } of a SOL transfer you sent to the launch wallet. Credits it as power.

Inside shipped apps

Apps get window.lathe. This is the same reference the builder model works from:

loading…

Quick start