apiton blog
apiton API changelog: Catalog, JettonPrices, Nft.Items, Address.Collections
This is a summary of what was added to the public apiton API (v2) in September 2026, with a
working curl example for each change. Every request is a POST with a JSON body to
https://app.apiton.org/<service>/<method>; all methods below are public and work without a key
at the free limits (1 request per second, 10,000 per month per IP). Get your own key with /get_api
in @apitonBot; the basics of keys, paging and errors are in
Using the apiton API with curl.
All examples were run against the live API when this article was written.
v2.Catalog: owner filter
v2.Catalog is the service behind apiton.org: filtered lists of Telegram usernames, +888 numbers
and .ton domains (List), sitemap chunks (Sitemap), history (Events) and counts (Summary).
New: List accepts owner_address (any form: raw, EQ…, UQ…). With an owner, kind may be
left empty to get every kind at once, ordered by kind. Items on sale are included — the owner is
the seller.
curl -X POST https://app.apiton.org/v2.Catalog/List \
-H 'Content-Type: application/json' \
-d '{"owner_address":"UQCdqXGvONLwOr3zCNX5FjapflorB6ZsOdcdfLrjsDLt3AF4","limit":100}'
At the time of writing this wallet held 17 catalog items: 12 .ton domains (foundation among
them), 3 usernames and 2 +888 numbers. As with every catalog call, total is an int64 and arrives as a JSON string.
v2.Catalog: TON Sites
Domains now carry the state of their TON Site. List has a site filter (record — the domain
has a DNS site record; live — the site answered the last probes with real content) and two
sorts, site_rank and site_live_since. Items gain site_status, site_rank and site_title, and
Summary returns live_sites.
curl -X POST https://app.apiton.org/v2.Catalog/List \
-H 'Content-Type: application/json' \
-d '{"kind":"domain","site":"live","sort":"site_rank","limit":50}'
This is the Live TON Sites list on apiton.org. How the probe and the rank work is described in Live TON Sites: how apiton finds and ranks them.
For one domain, v2.Nft/Domain now returns a site object: kind (adnl or storage),
address, status, title, latency_ms, uptime_30d, checked_at and live_since.
curl -X POST https://app.apiton.org/v2.Nft/Domain \
-H 'Content-Type: application/json' \
-d '{"domain":"foundation.ton"}'
v2.Catalog: known jettons and collections in the sitemap
Sitemap accepts two new kinds, jetton and collection. They list the known jetton masters
and NFT collections — a curated set: the three catalog collections, Telegram gift collections and
established jettons from a DEX asset list. Here name is the contract address (UQ…), and the
next page starts after_name the last address.
curl -X POST https://app.apiton.org/v2.Catalog/Sitemap \
-H 'Content-Type: application/json' \
-d '{"kind":"jetton","limit":5000}'
At the time of writing there were 285 known jettons and 117 known collections.
v2.Address/Details: known
Details answers two new fields: known (true for an address in that curated set) and
known_source (catalog, gifts, stonfi or manual).
curl -X POST https://app.apiton.org/v2.Address/Details \
-H 'Content-Type: application/json' \
-d '{"address":"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs"}'
For the USD₮ master this returns "known":true,"known_source":"stonfi". known is false for
every other address.
v2.Rate/JettonPrices and Jetton.price_usd
Rate/JettonPrices returns the USD price of one whole token for up to 100 jetton masters. The map
is keyed by each master exactly as you sent it; a jetton without a price is absent, never 0.
curl -X POST https://app.apiton.org/v2.Rate/JettonPrices \
-H 'Content-Type: application/json' \
-d '{"master":["EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs"]}'
The same price is now attached to every balance from v2.Address/Jettons as price_usd. Where it
comes from and why it can be missing: Jetton prices in USD.
v2.Nft/Items: items of a collection
A new method returns a page of one collection's items, with display metadata resolved on the
server — name, description, image, image_medium (a resized https preview), content_url,
lottie for Telegram gifts, domain for .ton items and collection_name. Page with limit
(up to 100) and offset.
curl -X POST https://app.apiton.org/v2.Nft/Items \
-H 'Content-Type: application/json' \
-d '{"collection_address":"EQBG-g6ahkAUGWpefWbx-D_9sQ8oWbvy6puuq78U2c4NUDFS","limit":24}'
That collection is Plush Pepes, one of the Telegram gift collections; the first item came back as
Plush Pepe #1330 with its image and Lottie animation URLs.
v2.Address/Nfts: resolved metadata and a collection filter
Address/Nfts now returns the same enriched items as Nft/Items, and accepts
collection_address to return only one collection:
curl -X POST https://app.apiton.org/v2.Address/Nfts \
-H 'Content-Type: application/json' \
-d '{"address":"foundation.ton","collection_address":"EQC3dNlesgVD8YbAazcauIrXBPfiVhMMr5YYk2in0Mtsz0Bz","limit":10}'
The collection in that request is TON DNS, so the answer is the .ton domains held by the address
that foundation.ton resolves to.
v2.Address/Collections: collections an address owns
The new Address/Collections lists NFT collections administered by an address — typically the
collections a wallet created — with name, image, description and items_count (absent for
collections that do not number items sequentially).
curl -X POST https://app.apiton.org/v2.Address/Collections \
-H 'Content-Type: application/json' \
-d '{"address":"UQDsP4js-X1VVS7mBZAuoeXvKcvOYlkpsdELBHwJOez07ckT","limit":100}'
At the time of writing this wallet owned two collections, TON Diamonds (10,000 items) and Meta Renaissance (889 items).
v2.Nft/Item: name, image, address, index
Nft/Item now also returns the item's address (UQ…), index and a display name and
image, derived for Telegram usernames, numbers, gifts and .ton domains when the metadata has
none.
curl -X POST https://app.apiton.org/v2.Nft/Item \
-H 'Content-Type: application/json' \
-d '{"address":"UQAcoW_B0vxbiLxdZGoz500BoFqjmNi5jA6w2nxwuqD8qJAW"}'
Takedowns
Catalog items removed by a manual takedown are now left out consistently: Address/Nfts and
Nft/Items skip them (a page can therefore hold fewer than limit items — keep paging by
offset), and Nft/Item, Nft/Username, Nft/Number and Nft/Domain answer
status: "unavailable".
Compatibility
All changes are additive: new methods, new optional request fields and new response fields.
Existing requests keep working. Remember that proto3 JSON omits zero values — code for missing
fields rather than 0, "" or [].
Questions, or want a higher limit? Open @apitonBot — /plan shows your
usage, /upgrade raises the limits.