/v1/tokenSupply, holder count, mintability, price and market cap in one call.
Gram Forge
Read-only access to the GRM token and Gram DNS domains on TON. No signup, no key, no CORS restrictions — call it from a script, a server or a browser tab.
Try it right now:
curl https://api.gram.su/v1/token
/v1/tokenSupply, holder count, mintability, price and market cap in one call.
/v1/pricePrice in USD, 24h change, aggregate volume and liquidity across every pool.
/v1/poolsEach tracked pool separately: its own price, depth, volume and trade count.
Served from a local index of every GRM jetton wallet, refreshed continuously, so filtering and sorting are instant. Every address comes back in all three forms, and carries the holder's .gram name when they have one.
/v1/holdersThe rich list. Sorted by balance, largest first.
/v1/holders?min_balance=100000&limit=10
/v1/holders/distributionHow many holders sit in each balance band and how much they hold together.
Try it/v1/holders/distribution
/v1/holders/{address}One holder: balance, rank and .gram name. Accepts any address form.
Try it/v1/holders/UQBracnk1lEA2gP5dqBFZUSSOSvhy_iLi-9fOGpTa6yky-Bm
Resolution follows TEP-81, read straight from the domain contract. Sale and auction state is detected automatically, so one call tells you whether a name is owned, listed, or still up for grabs.
/v1/dnsBrowse or search the collection.
/v1/dns?on_sale=true&sort=price&limit=10
/v1/dns/statsTotals: domains, distinct owners, how many are listed, minted today, expiring within 30 days.
Try it/v1/dns/stats
/v1/dns/{name}Everything about one domain - see the shape below.
Try it/v1/dns/needmore
/v1/dns/{name}/imageThe domain artwork as PNG.
/v1/dns/needmore/image?size=512
Worth knowing before you write against this.
Envelope. Success is
{ "ok": true, "data": … }; failure is
{ "ok": false, "error": "code", "message": "…" }.
Status codes always agree with ok.
Three address forms, everywhere. Every address is returned as
raw, bounceable and
non_bounceable, so you never have to convert. Any of the three is
accepted as input.
Paginate with the cursor. Offset paging makes the database walk
every preceding row: at 200 000 holders, offset=199000 takes 170 ms
while a cursor takes 0.3 ms and stays flat at any depth. Offset is capped at 10 000 for that
reason — follow next_cursor instead.
Missing means null, never zero. When a figure can't be
determined the field is null. A zero here is a real zero.
GRM is not GRAM. GRAM is the network's native coin, formerly
Toncoin. GRM is this jetton, contract
EQC47093oX5Xhb0xuk2lCr2RhS8rj-vul61u4W2UH5ORmG_O.
Domain status. owned — has an owner.
on_sale — listed, with market and price attached.
auction — unclaimed or mid-auction, and
auction_url points at the bid page.
Caching. Every response carries a real
Cache-Control. Respect it and you will not hit the rate limit: prices last
ten seconds, holder pages thirty, domain images a year.
Higher limits. Send X-API-Key.
Ask @nosint — free for ecosystem projects.
What /v1/dns/{name} returns.
{
"ok": true,
"data": {
"domain": "needmore.gram",
"status": "owned",
"contract": {
"raw": "0:76046da8...e06e",
"bounceable": "EQB2BG2o...blAU",
"non_bounceable": "UQB2BG2o...bg3R"
},
"owner": { "raw": "0:...", "bounceable": "EQ...", "non_bounceable": "UQ..." },
"balance_gram": 0.0521,
"minted_at": "2026-03-04T11:22:19Z",
"mint_price_gram": 3.5,
"expires_at": "2027-03-04T11:22:19Z",
"expires_in_days": 193,
"records": {
"wallet": { "raw": "0:...", "bounceable": "EQ...", "non_bounceable": "UQ..." },
"site_adnl": null,
"storage_bag": null,
"next_resolver": null
},
"sale": null,
"images": {
"1024": "https://api.gram.su/v1/dns/needmore/image?size=1024",
"512": "https://api.gram.su/v1/dns/needmore/image?size=512",
"256": "https://api.gram.su/v1/dns/needmore/image?size=256"
}
}
}