Get crypto heatmap
Fetch bounded token tiles from one fresh global top-50 market snapshot, ranked by normalized market cap and grouped by Qoory category. Results use canonical Qoory token identities and omit provider identifiers, ranks, media, source metadata, pagination, arbitrary sorting, and historical prices.
GET
/
v1
/
markets
/
crypto-heatmap
Get crypto heatmap
curl --request GET \
--url https://api.qoory.ai/v1/markets/crypto-heatmap \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.qoory.ai/v1/markets/crypto-heatmap"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.qoory.ai/v1/markets/crypto-heatmap', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.qoory.ai/v1/markets/crypto-heatmap",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.qoory.ai/v1/markets/crypto-heatmap"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.qoory.ai/v1/markets/crypto-heatmap")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qoory.ai/v1/markets/crypto-heatmap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"kind": "crypto_heatmap",
"as_of": "2026-07-10T00:00:00.000Z",
"limit": 50,
"results": [
{
"type": "token",
"rank": 1,
"id": "bitcoin",
"symbol": "BTC",
"name": "Bitcoin",
"category": "L1",
"price_usd": 65000,
"change_24h_pct": 2.4,
"market_cap_usd": 1280000000000
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 2,
"credits_remaining": 98,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_API_KEY",
"message": "The API key is invalid."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Not enough credits are available for this request."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 0,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key does not have the required scope."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request parameters are invalid.",
"details": [
{
"path": "limit",
"message": "Expected a value within the documented range.",
"code": "too_big"
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "The request could not be completed."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}Authorizations
Use the HTTP authentication scheme with a Qoory API key.
Query Parameters
Maximum number of items to return. This API does not expose pagination for this operation.
Required range:
1 <= x <= 50⌘I
Get crypto heatmap
curl --request GET \
--url https://api.qoory.ai/v1/markets/crypto-heatmap \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.qoory.ai/v1/markets/crypto-heatmap"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.qoory.ai/v1/markets/crypto-heatmap', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.qoory.ai/v1/markets/crypto-heatmap",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.qoory.ai/v1/markets/crypto-heatmap"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.qoory.ai/v1/markets/crypto-heatmap")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qoory.ai/v1/markets/crypto-heatmap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"kind": "crypto_heatmap",
"as_of": "2026-07-10T00:00:00.000Z",
"limit": 50,
"results": [
{
"type": "token",
"rank": 1,
"id": "bitcoin",
"symbol": "BTC",
"name": "Bitcoin",
"category": "L1",
"price_usd": 65000,
"change_24h_pct": 2.4,
"market_cap_usd": 1280000000000
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 2,
"credits_remaining": 98,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_API_KEY",
"message": "The API key is invalid."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Not enough credits are available for this request."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 0,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key does not have the required scope."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request parameters are invalid.",
"details": [
{
"path": "limit",
"message": "Expected a value within the documented range.",
"code": "too_big"
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "The request could not be completed."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}