Overview
Squint reads every token launched on Nearly and grades it for the risks that matter before you buy: who the developer is, who sniped the launch, and which top holders are really the same person. The API returns exactly what the scanner shows.
- Every endpoint is a
GETunderhttps://api.nearsquint.tech/v1and returns JSON. - Shares of supply are fractions from 0 to 1:
0.0412means 4.12%. - Times are ISO 8601 in UTC. Amounts are in USD or NEAR, as the field name says.
- Accounts are NEAR account ids: named (
alice.near) or 64-character implicit accounts. GET /v1lists the endpoints and the current limits.
Quick start
Grade a token by contract or ticker. A token that hasn't been graded in the last few minutes is graded on the spot, which takes 2 to 15 seconds, so allow a timeout of at least 30 seconds.
curl https://api.nearsquint.tech/v1/tokens/squint.nearlytrade.near
const res = await fetch("https://api.nearsquint.tech/v1/tokens/$SQUINT");
const report = await res.json();
console.log(report.verdict, report.risk, report.summary);
// the checks that didn't pass
for (const c of report.checks) if (c.status !== "good") console.log(c.label, c.headline);
import requests
r = requests.get("https://api.nearsquint.tech/v1/tokens/$SQUINT", timeout=30)
report = r.json()
print(report["verdict"], report["risk"], report["summary"])
for c in report["checks"]:
if c["status"] != "good":
print(c["label"], c["headline"])
In a shell, quote a ticker or write the $ as %24, so the shell doesn't read $SQUINT as a variable.
Limits and caching
- 120 requests a minute per IP address across all endpoints, with at most 20 in any 10 seconds.
- 20 new scans a minute per IP address, shared with the website's scanner. A request is a new scan only when Squint has to read the chain: a token not graded in the last minute (coins under 6 hours old) or the last 10 minutes (older coins), or a wallet not traced in the last 30 days. Everything else is served from what Squint already has.
- Over either limit, you get
429withRetry-After: 60. - Responses are cached at Cloudflare's edge for 15 to 60 seconds;
Cache-Controlsays how long. Reports carrychecked_at, the moment they were graded.
Need more than that for a bot or a product? Message @squintnear.
Errors
Errors use standard HTTP status codes and share one shape:
{ "error": { "code": "not_found", "message": "Squint covers tokens launched on Nearly. This one isn't in its index." } }| Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | The token, account or query isn't valid. |
| 404 | not_found | No Nearly token matches, or the endpoint doesn't exist. |
| 405 | method_not_allowed | The API is read-only. Use GET. |
| 429 | rate_limited | Over a limit. Wait for Retry-After seconds. |
| 502 | upstream_unavailable | Nearly or the NEAR RPC didn't answer. Retry in a moment. |
| 500 | internal_error | Something broke on our side. |
Endpoints
/v1/tokens/{token}The full risk report for one token: the verdict and risk score, all nine checks, how the supply is split, the top 25 holders with their funders, and the clusters of linked wallets.
| Parameter | Description |
|---|---|
token | A contract id (squint.nearlytrade.near) or a ticker ($SQUINT or SQUINT). A ticker that several tokens use resolves to the one with the most holders, and the response adds a resolved object saying so. |
| Field | Description |
|---|---|
verdict, risk | clean, caution or danger, and a risk score from 0 to 100. See Verdicts. |
checks[] | Nine checks, each with id, status, a one-line headline, detail and the accounts involved. See Checks. |
supply | Shares held by the pool, the dev, snipers, linked wallets, other top holders, and the rest. |
holders[] | Top 25 holders, excluding pools and the launchpad: share, tags, funder, funder_kind, created_at. |
clusters[] | Groups of holders connected by funding, shared keys or transfers, with their combined share. |
market, tax | Fully diluted value, liquidity, volume, holder count, and the trade tax fixed at launch (status is none, set or unknown). |
coverage | How many of the top wallets were traced, and whether the token's transfer history has been read in full. |
{
"token": "nearly-993927.nearlytrade.near",
"symbol": "NEARLY",
"name": "NEARLY",
"icon": "https://nearly.trade/api/img/146653e7e11dc99419b4421d14450ab0.webp",
"creator": "nearlytrade.near",
"created_at": "2026-09-22T00:36:42.372Z",
"verdict": "clean",
"label": "Clean",
"risk": 12,
"summary": "No major red flags.",
"flags": {
"bad": 0,
"warn": 1
},
"checks": [
{
"id": "copy",
"label": "Original or copy",
"status": "good",
"headline": "The most held $NEARLY.",
"detail": "6 other tokens use this ticker, all with far fewer holders.",
"accounts": []
},
{
"id": "dev",
"label": "Developer wallet",
"status": "good",
"headline": "Developer holds 0.0%.",
"detail": "Developer: nearlytrade.near. Bought 1.0 NEAR worth at launch.",
"accounts": [
"nearlytrade.near"
]
},
{
"id": "history",
"label": "Developer history",
"status": "good",
"headline": "First launch from this developer.",
"detail": "",
"accounts": []
}
],
"market": {
"fdv_usd": 6672672.62,
"liquidity_near": 40383.52,
"volume_near": 1192710.1,
"holders": 2114
},
"tax": {
"status": "none",
"buy_pct": 0,
"sell_pct": 0
},
"supply": {
"pool": 0.06135,
"dev": 0,
"snipers": 0.014788,
"linked": 0.024537,
"holders": 0.422422,
"rest": 0.476903
},
"holders": [
{
"rank": 1,
"account": "soundtoad4414.near",
"share": 0.018569,
"tags": [
"fresh"
],
"funder": "a9c8669de0ba79fbd634549bcfc9a250c94b49d8f0e021f491cb23b247eac61d",
"funder_kind": "wallet",
"funded_via": null,
"created_at": "2026-09-22T21:36:24.968Z"
},
{
"rank": 2,
"account": "0xdcc200cee7a6453fbc5e26d6c7c91708f80fcfd5",
"share": 0.016547,
"tags": [
"fresh"
],
"funder": null,
"funder_kind": null,
"funded_via": "m-eth-wallet.near",
"created_at": "2026-09-27T14:13:27.313Z"
}
],
"clusters": [
{
"id": "A",
"share": 0.031514,
"wallets": [
"nearwithmee.near",
"ngear.near",
"bnearr.near"
],
"funders": [
"colddress6080.near"
],
"linked_by": [
"funding"
],
"links": [
{
"from": "colddress6080.near",
"to": "nearwithmee.near",
"type": "funded"
},
{
"from": "colddress6080.near",
"to": "ngear.near",
"type": "funded"
}
]
}
],
"coverage": {
"wallets_traced": 41,
"wallets_checked": 41,
"transfers_complete": false
},
"socials": {
"website": "https://nearly.trade",
"twitter": "https://x.com/nearlytrade",
"telegram": null
},
"links": {
"report": "https://nearsquint.tech/?q=nearly-993927.nearlytrade.near",
"nearly": "https://nearly.trade/t/nearly-993927.nearlytrade.near"
},
"checked_at": "2026-09-28T05:46:39.330Z",
"resolved": {
"from": "$NEARLY",
"matches": 7,
"picked": "most holders"
}
}
/v1/tokens/{token}/mapThe graph behind the bubble map. Nodes are the top holders, the developer, shared funders and pools. Edges are funding, shared signing keys and token transfers between them. Use it to draw your own map.
| Field | Description |
|---|---|
nodes[] | id, kind (holder, dev, funder, pool), share, tags, holder rank, cluster id, funder, created_at. |
edges[] | from, to, type (funded, key, transfer). Transfers add the share of supply moved and a count. |
clusters[] | Same as in the report. |
transfers | How much of the token's transaction history has been read: complete, scanned, total. |
{
"token": "nearly-993927.nearlytrade.near",
"symbol": "NEARLY",
"nodes": [
{
"id": "soundtoad4414.near",
"kind": "holder",
"share": 0.018569,
"tags": [
"fresh"
],
"rank": 1,
"cluster": null,
"funder": "a9c8669de0ba79fbd634549bcfc9a250c94b49d8f0e021f491cb23b247eac61d",
"created_at": "2026-09-22T21:36:24.968Z"
},
{
"id": "0xdcc200cee7a6453fbc5e26d6c7c91708f80fcfd5",
"kind": "holder",
"share": 0.016547,
"tags": [
"fresh"
],
"rank": 2,
"cluster": null,
"funder": null,
"created_at": "2026-09-27T14:13:27.313Z"
}
],
"edges": [
{
"from": "colddress6080.near",
"to": "nearwithmee.near",
"type": "funded"
},
{
"from": "colddress6080.near",
"to": "ngear.near",
"type": "funded"
}
],
"clusters": [
{
"id": "A",
"share": 0.031514,
"wallets": [
"nearwithmee.near",
"ngear.near",
"bnearr.near"
],
"funders": [
"colddress6080.near"
],
"linked_by": [
"funding"
],
"links": [
{
"from": "colddress6080.near",
"to": "nearwithmee.near",
"type": "funded"
},
{
"from": "colddress6080.near",
"to": "ngear.near",
"type": "funded"
}
]
}
],
"transfers": {
"complete": false,
"scanned": 11833,
"total": 16800
},
"checked_at": "2026-09-28T05:46:39.330Z"
}
/v1/wallets/{account}One wallet's record: when it was created and who funded it, the Nearly coins it holds right now, how often it was among the first five buyers of a launch, how it trades, the coins it has launched, and the wallets it's linked to.
| Field | Description |
|---|---|
labels | Plain flags: serial_sniper, early_buyer, developer, serial_launcher, quick_flipper (sells within 30 minutes, as a median over 3+ coins), funds_holders and new_wallet (under 24 hours old). |
wallet | created_at, the first funder and its funder_kind (wallet or service, such as an exchange or bridge), funded_via when it arrived through a relayer or NEAR Intents, key_siblings, and funded_wallets: traced holders whose first NEAR came from this wallet. traced is false when its history couldn't be read. |
holdings | The Nearly coins it holds now, read live: each coin's share of supply, amount, value_usd and verdict, plus the total. null when balances couldn't be read. |
sniper | first_buyer_in: launches where it was one of the first five buyers. serial is true at 10 or more. |
trading | Coins traded, buys, sells, USD in and out, and median_minutes_to_first_sell: for each coin, the time from its first buy to its first sell after that, as a median across coins. Built from the trades Squint has recorded, which can miss a small share. |
launches | Tokens this account created on Nearly, with their current verdict. |
{
"account": "5d194c7b6c82ebeefbade009e71eefccaae24d2ff54fdaf65b358613ab22b4cc",
"labels": [
"serial_sniper",
"new_wallet"
],
"wallet": {
"traced": true,
"created_at": "2026-09-27T16:21:58.470Z",
"funder": null,
"funder_kind": null,
"funded_via": "intents.near",
"key_siblings": [],
"funded_wallets": []
},
"holdings": {
"count": 0,
"value_usd": 0,
"tokens": []
},
"sniper": {
"first_buyer_in": 51,
"serial": true,
"launches": [
{
"token": "illia-2.nearlytrade.near",
"symbol": "ILLIA",
"rank": 1,
"seconds_after_open": 11.8,
"launched_at": "2026-09-27T20:34:16.142Z"
},
{
"token": "derarhea.nearlytrade.near",
"symbol": "DERARHEA",
"rank": 2,
"seconds_after_open": 12.1,
"launched_at": "2026-09-27T20:29:16.453Z"
}
]
},
"trading": {
"coins_traded": 51,
"buys": 52,
"sells": 57,
"bought_usd": 205.08,
"sold_usd": 482.77,
"median_minutes_to_first_sell": 119.3,
"sold_within_1h": 8,
"first_trade_at": "2026-09-27T16:59:21.203Z",
"last_trade_at": "2026-09-27T21:43:41.570Z",
"recent": [
{
"token": "gnear.nearlytrade.near",
"symbol": "GNEAR",
"icon": "https://nearly.trade/api/img/1aa101d594b535a144edbdbfdd99c33b.webp",
"buys": 1,
"sells": 2,
"bought_usd": 0,
"sold_usd": 2.46,
"first_buy_at": "2026-09-27T18:00:24.508Z",
"first_sell_at": "2026-09-27T18:06:21.300Z",
"holds_share": 0
}
]
},
"launches": {
"count": 0,
"recent": []
},
"checked_at": "2026-09-28T05:55:56.511Z"
}
/v1/coinsEvery Nearly launch Squint has read, with its latest grade. Sort and filter it like the coin index on the site.
| Parameter | Description |
|---|---|
sortoptional | mcap (default), volume, holders, age, risk, change or name. |
diroptional | desc (default) or asc. With sort=risk, desc puts the riskiest first. Coins not graded yet always come last. |
verdictoptional | Only clean, caution or danger coins. |
min_holdersoptional | Leave out coins with fewer holders. |
limit, offsetoptional | Page size from 1 to 100 (default 50), and where to start. |
{
"total": 818,
"offset": 0,
"count": 5,
"sort": "volume",
"dir": "desc",
"verdict": null,
"near_usd": 5.1703,
"coins": [
{
"token": "nearly-993927.nearlytrade.near",
"symbol": "NEARLY",
"name": "NEARLY",
"icon": "https://nearly.trade/api/img/146653e7e11dc99419b4421d14450ab0.webp",
"created_at": "2026-09-22T00:36:42.372Z",
"holders": 2114,
"fdv_usd": 6227785.1,
"fdv_near": 1204530.71,
"volume_24h_usd": 3900907.56,
"volume_24h_near": 754483.79,
"change_24h_pct": 103.6
},
{
"token": "ninu-4.nearlytrade.near",
"symbol": "NINU",
"name": "NEAR INU",
"icon": "https://nearly.trade/api/img/a46185756d201acb8290d4c4e64cc4f3.webp",
"created_at": "2026-09-27T09:30:49.994Z",
"holders": 877,
"fdv_usd": 438609.14,
"fdv_near": 84832.44,
"volume_24h_usd": 747341.68,
"volume_24h_near": 144545.13,
"change_24h_pct": 8383.24
}
]
}
/v1/searchFind tokens by ticker, name, contract or nearly.trade link. An exact contract match comes first, then exact tickers, then the rest by holder count.
| Parameter | Description |
|---|---|
q | What to look for. |
limitoptional | From 1 to 25 (default 10). |
{
"query": "ninu",
"count": 3,
"results": [
{
"token": "ninu-4.nearlytrade.near",
"symbol": "NINU",
"name": "NEAR INU",
"icon": "https://nearly.trade/api/img/a46185756d201acb8290d4c4e64cc4f3.webp",
"created_at": "2026-09-27T09:30:49.994Z",
"holders": 877,
"fdv_usd": 438609.14,
"verdict": "clean",
"risk": 12
},
{
"token": "ninu-5.nearlytrade.near",
"symbol": "NINU",
"name": "Near Inu",
"icon": "https://nearly.trade/api/img/bb75fa869fe878a5f230b109fec9d112.webp",
"created_at": "2026-09-27T10:14:54.696Z",
"holders": 10,
"fdv_usd": 6262.76,
"verdict": "caution",
"risk": 30
}
]
}
/v1/snipersSerial snipers: wallets that were among the first five buyers in at least min launches, most active first. Useful as a watchlist or a blocklist.
| Parameter | Description |
|---|---|
minoptional | Minimum number of launches (default 10, lowest 3). |
limit, offsetoptional | Page size from 1 to 200 (default 50), and where to start. |
{
"min_launches": 10,
"launches_tracked": 420,
"offset": 0,
"count": 10,
"snipers": [
{
"account": "internisactive.near",
"first_buyer_in": 55,
"avg_seconds_after_open": 58.6,
"last_seen_at": "2026-09-28T04:24:17.633Z"
},
{
"account": "5d194c7b6c82ebeefbade009e71eefccaae24d2ff54fdaf65b358613ab22b4cc",
"first_buyer_in": 51,
"avg_seconds_after_open": 9.4,
"last_seen_at": "2026-09-27T20:34:16.142Z"
}
]
}
/v1/statsHow much Squint has indexed, and when it last synced with Nearly. It syncs every minute.
{
"launches": 818,
"trades": 38666,
"wallets_traced": 1410,
"serial_snipers": 19,
"synced_at": "2026-09-28T05:55:19.001Z",
"newest_trade_at": "2026-09-28T05:55:05.358Z"
}
Verdicts and risk
Every token starts at a risk of 0. Each check that comes back bad adds 30 and each warn adds 12, up to 100.
| Verdict | Risk | Meaning |
|---|---|---|
| clean | 0 to 25 | No major red flags. |
| caution | 26 to 55 | Flags worth a closer look before you buy. |
| danger | 56 to 100 | Serious red flags. Most buyers should walk away. |
Checks
A check's status is good, warn, bad or unknown. Unknown means the chain couldn't be read just then; it doesn't add risk, and the next scan tries again.
| id | Looks at | warn | bad |
|---|---|---|---|
copy | Other tokens with the same ticker | – | Another one has 5× the holders (and at least 20) |
dev | What the developer holds and has sold | Over 3%, or sold over $500 | Over 10% |
history | The developer's other launches | 3 or more | 8 or more, or 5 dead |
snipers | Supply still held by the earliest buyers | Over 10% | Over 25% |
linked | Holders connected by funding, keys or transfers | Over 8% combined | Over 20%, or the developer's group over 10% |
top10 | The ten largest holders, excluding pools | Over 35% | Over 55% |
fresh | Wallets created just before the launch or after it | Over 30% | Over 50% |
tax | The trade tax fixed at launch | 3% or more on either side | – |
liquidity | NEAR in the pool (locked by Nearly) | Under 30 NEAR | – |
Map and clusters
Squint traces each of the top 40 holders back to the first account that sent it NEAR, and looks up every other account that shares its signing key. It also reads the token's own transfer events.
funded: the first NEAR this wallet ever received came from that account. A funder appears on the map when it funded two or more holders, or when it is itself a holder.key: both accounts are controlled by the same full-access key.transfer: tokens moved directly between the two wallets, counted when the total is at least 0.05% of supply. Pools, routers and the launchpad are left out.
A cluster is every holder connected through any chain of those links. Its linked_by lists the kinds of link involved: funding, shared keys and transfers. Funders that are services (exchanges, bridges and similar hubs, or any account with over 3,000 transactions) have funder_kind: "service" and never link wallets on their own.
Terms
- Free for any use, including commercial bots and dashboards. Where people will see the data, please credit Squint with a link to nearsquint.tech.
- Scores are automated readings of public blockchain data. They can be incomplete or wrong and are not financial advice.
- v1 fields won't be renamed or removed. New fields may be added at any time, so ignore any you don't recognise.
Changelog
| 28 Sep 2026 | Wallets gain labels, live holdings and funded_wallets. change_24h_pct in /coins is now a true percentage (it was 100× too small). /tokens/{wallet} now answers 404 with a pointer to /wallets. |
| 28 Sep 2026 | v1 released: token reports, holder maps, wallet records, the coin index, search, serial snipers and stats. |