Algorand

NFT Tracker docs

A recent NFT sales feed from Algorand MainNet. Not a marketplace. No cart, no floor, no listings.

The live page is /. Tabs and collection cards push ?view= and ?creator=, so the browser Back button returns to the previous view. The page lives in web/src/components/algorand/mountTracker.ts in this repo. Its data comes from CorvidLabs' hosted tracker API.

What it tracks

The stored feed is cursor-paginated from the hosted tracker API. The browser walks up to 30 pages of 200 rows on the first load, then keeps that history while refreshes fetch only the newest page. Assets and collections summarize the loaded ledger history, not a wallet's holdings. Home shows Nevermore or Baby Jay and the two strongest other collections with sales today, then a few recent sales. Graphs is the volume and the daily chart. The Collections list keeps one OG Donkeys card first, for four mint wallets of one set. Opening a collection shows its pieces. Sales for that collection are the other tab on that page (?pane=sales), not the site Sales view. Nevermore also uses its baked catalog for collection art and its known asset count.

Sale confidence and currencies

The tracker classifies sales and supplies confirmed, likely, or inferred confidence. The page preserves those classifications, including sales below 1 ALGO. Payments in other assets show their currency asset ID; charts and ALGO volume include only ALGO payments. A bundle can have multiple sale rows sharing one transaction link.

If the hosted API is unavailable and the page has no stored sales to keep, the page labels its public indexer fallback. A failed refresh leaves stored sales and the server-rendered page in place. That smaller recent-block sample includes 1/1 transfers and mints. Its browser classifier infers sales from grouped transfers and payments of at least 1 ALGO, excluding known listing fees. Its coverage and classification differ from the stored ledger.

Images

The browser enriches sales with cached public indexer metadata. Artwork is always served by Shiny: Nevermore images are embedded under /nevermore/, and other thumbnails use /tracker-art/{assetId} when the sales row has a picture. That route resolves stored asset metadata into a signed /media/ URL. The server handles ARC-3 / ARC-19 resolution and gateway fallback. Unknown or unavailable artwork keeps its placeholder; the sale remains visible.

API

The page requests /v1/sales?limit=200 and maps the returned sales array into its views. The API's 200-row page size is not a 200-sale ceiling: the page follows next_cursor with a short delay between requests, then builds its totals and charts from the cursor walk. If a walk is interrupted, the UI labels the history partial instead of presenting it as all-time data.

PathReturns
GET /v1/healthService health
GET /v1/salesSales and optional next_cursor
GET /v1/sales/{id}One sale
GET /v1/assets/{assetId}/salesAsset sales
GET /v1/wallets/{address}/salesWallet sales
GET /v1/collections/{collection}/salesCollection sales
GET /v1/marketplacesSupported marketplaces

The public page uses anonymous access. The hosted API currently provides 30 days of history with a 60-second delay and 1,000 calls per day. Polling every two minutes uses about 720 calls per day for one continuously open page. Refreshes fetch only the newest page; the first history walk is capped at 30 pages of 200 rows and merged into the browser cache. Other tabs and clients sharing its quota can still reach the limit. Provider credentials stay server-side; no paid key is embedded in this static site.

Using the hosted API

This is a hosted public feed. Visitors do not need to run or deploy the tracker service. The page uses the same-origin API at /v1/; provider credentials and ingestion services remain server-side and are never exposed to the browser.

Operations

Shiny serves this tracker and its API from the same application. Provider credentials and ingestion stay on the server.