A free JSON API for trending cryptocurrencies
Four endpoints, no key, no sign-up, no rate limit. The same numbers that build every page on this site, rebuilt once a day and served as plain JSON under CC BY 4.0 — you only have to name the source.
What this API is
Today's trending.json carries 30 coins and weighs 40.4 kB. A coin object has 28 top-level fields; nothing is nested more than two levels deep. The country file describes 43 markets; 26 returned data today and together they hold 247 entries. There are 14 sectors in categories.json, and Layer 1 chains tops it with 28 trending members. The /api/coin/ folder holds 108 fresh files and 0 archived ones that are never deleted.
At the head of the response you will find Zcash, trend score 98. Signals are filled in for 29 of 30 coins; missing history is reported, never guessed. The hype_risk field reads high for 5 coins and low for 12 today. Half the list moved more than +6.3% in the last day; 27 of them are up. The longest streak in the file belongs to Zcash, at 2 consecutive days on the list.
The widest geographic spread is NEAR Protocol, trending in 13 countries at once. At the top of countries.json sits Indonesia, holding 30 coins. Each coin file ships a history array of up to 30 points, taken from 3 stored snapshots. Total payload across the endpoints is 674.9 kB, including every per-coin file.
Endpoints
No key, no headers, no POST. Every file is a static GET.
| Endpoint | Returns | Records | Size |
|---|---|---|---|
/api/trending.json | Global top 30: rank, coin, symbol, trend score, country count, signal, hype risk, price, 24h | 30 | 40.4 kB |
/api/countries.json | Every national market and the coins trending inside it, in list order | 43 | 118.5 kB |
/api/categories.json | Sector categories: members, trending members, median 24h move, combined market cap | 14 | 5.8 kB |
/api/index.json | Endpoint catalogue and the slug list for today | 4 | 2.1 kB |
/api/coin/<slug>.json | One coin in full: score breakdown, hype-risk breakdown, indicators, country positions, 30 days of rank history | 108 | one file each |
Slugs match the site URLs: /coin/pepe/ is /api/coin/pepe.json. A coin only gets a file once it has a page, so unresolved and single-day entries are in trending.json but not in /api/coin/.
Field reference
Percentages are fractions. 0.042 means +4.2%.
| Field | Type | Meaning |
|---|---|---|
rank | integer | Position in today's global trending list, 1 = highest interest. |
id | string / null | CoinGecko id, the primary key of this dataset. Null when the upstream identity could not be resolved. |
slug | string | URL slug used by both the site page and the per-coin file. |
symbol | string | Ticker, upper case. Not unique — several projects share a ticker, so join on id. |
trend_score | integer 0–100 | Combined interest score: CoinGecko rank, two CoinMarketCap lists, country spread and Binance Hot membership. |
countries | integer | How many national lists the coin appears on today. |
country_slugs | array | Which markets those are, matching the slug field of countries.json. |
days_on_list | integer / null | Consecutive days on a trending list. 1 means it arrived today. |
rank_change | integer / null | Yesterday's rank minus today's. Positive means it climbed. Null when there is no comparable snapshot. |
confirmed | boolean | True when at least two independent upstream sources list the coin. |
sources | object | Which of the three upstream lists the coin came from. |
signal | string | strong_buy, buy, neutral, sell, strong_sell or none. A summary of the daily technical model, not advice. |
technical_score | integer / null | Share of passed technical checks, 0–100. Null when there is too little price history. |
limited_data | boolean / null | True when the model ran without real high/low data, so Supertrend, ADX and breakout checks were skipped. |
hype_risk | object | score 0–100 and level low / medium / high, from six transparent criteria. |
price_usd | number / null | Latest price in US dollars. |
change_24h / change_7d / change_30d | number / null | Price change as a fraction over the last 1, 7 and 30 days. |
market_cap_usd / volume_24h_usd | number / null | Market capitalisation and 24-hour traded volume in dollars. |
history | array | Per-coin files only: date, rank, trend score, country count and price for up to 30 days. |
Example response
Real output from /api/trending.json, trimmed to the meta block and the first coin.
{
"meta": {
"generated": "2026-09-18T00:37:58+00:00",
"date": "2026-09-18",
"dataset": "Global trending cryptocurrencies, top 30",
"license": "CC BY 4.0",
"attribution_url": "https://cryptotrendsmap.com/",
"update_frequency": "once a day, 00:35 UTC"
},
"coins": [
{
"rank": 1,
"id": "zcash",
"slug": "zcash",
"name": "Zcash",
"symbol": "ZEC",
"url": "https://cryptotrendsmap.com/coin/zcash/",
"api_url": "https://cryptotrendsmap.com/api/coin/zcash.json",
"trend_score": 98,
"countries": 12,
"country_slugs": [
"australia",
"india",
"indonesia",
"netherlands",
"norway",
"romania",
"saudi-arabia",
"south-korea",
"sweden",
"ukraine",
"united-arab-emirates",
"vietnam"
],
"days_on_list": 2,
"rank_change": 0,
"new_entry": false,
"confirmed": true,
"sources": {
"coingecko": true,
"coinmarketcap": true,
"binance_hot": true
},
"signal": "strong_buy",
"signal_label": "Strong buy",
"technical_score": 100,
"technical_checks": 10,
"limited_data": false,
"hype_risk": {
"score": 32,
"level": "medium"
},
"price_usd": 1450.94,
"change_24h": 0.081162,
"change_7d": 0.342,
"change_30d": 1.894,
"market_cap_usd": 24588013736,
"volume_24h_usd": 2557220664,
"market_cap_rank": 9
}
]
}Refresh, caching and CORS
The whole dataset is rebuilt once a day at 00:35 UTC and does not change in between; the generated and date fields in every file tell you which run you are holding. Polling more often than daily only costs you bandwidth. Files are served with Access-Control-Allow-Origin: * and a one-hour cache, so browser code can fetch them directly.
Nothing is ever deleted. When a coin leaves the trending list its file stays where it was and flips to "trending": false, and a market that stops publishing keeps its entry with has_data: false. Consumers see the gap instead of a missing key or a 404.
Attribution
Published under CC BY 4.0. Use it in an app, a paper, a dashboard or a newsletter; the one condition is a visible credit with a working link. This line is enough:
Data from Crypto Trends Map (https://cryptotrendsmap.com/)If you would rather show the numbers than fetch them, the embeddable widget carries the credit for you.
Questions
Do I need an API key?
No. There is no key, no account and no rate limit. The endpoints are static JSON files on a CDN-friendly host, so a GET is all it takes.
How often does the data change?
Once a day. Collection runs at 00:35 UTC and every file is rewritten from scratch in the same run, so the whole dataset is always internally consistent.
Can I use it commercially?
Yes, under CC BY 4.0: keep a visible credit with a link back to cryptotrendsmap.com. You do not need to ask first.
Is trending a buy signal?
No. Trending measures search and page-view interest, and the technical signal is a summary of ten mechanical checks on daily closes. Neither is a forecast and neither is financial advice.
Why is a coin missing from /api/coin/?
A coin gets its own file once it has held a page — two days on the list or three countries. Before that it appears in trending.json only, because a single day of data would not fill the fields.
What happens to old files?
They stay. Coin files switch to trending: false and keep their history, so links and mirrors made months ago still resolve.