import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.searchTokens({
query: 'BONK',
quoteToken: ['SOL', 'USDC'], // Only pools quoted in SOL or USDC.
limit: 10,
});
curl --request GET \
--url https://data.solanatracker.io/search \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://data.solanatracker.io/search', 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://data.solanatracker.io/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://data.solanatracker.io/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.solanatracker.io/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": [
{
"id": "1mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump_1mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump",
"name": "Search Example",
"symbol": "SEARCH",
"mint": "1mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump",
"image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fipfs.io%2Fipfs%2Fbafkreieea4t7xuw6x52tzw3j4sl5khztxlvq6fkmmik2v4hue6gf3h6z4u",
"decimals": 6,
"hasSocials": true,
"hasCoinCommunity": true,
"communityMessages": 12,
"poolAddress": "9mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump",
"liquidityUsd": 11448.851629727089,
"marketCapUsd": 5598.428247103462,
"priceUsd": 0.000005598428247103462,
"lpBurn": 100,
"market": "pumpfun",
"quoteToken": "So11111111111111111111111111111111111111112",
"freezeAuthority": null,
"mintAuthority": null,
"deployer": "46AxLXbx5bG3jGcT881u61v7aRoAftmtA4JBtfVyiEmv",
"status": "default",
"createdAt": 1760273456641,
"lastUpdated": 1760273468644,
"holders": 2,
"launchpad": {
"name": "",
"url": "",
"logo": "",
"curvePercentage": 6.366677291506747,
"fee": 0.25
},
"buys": 2,
"sells": 1,
"totalTransactions": 3,
"volume": 304.8940710222087,
"volume_5m": 286,
"volume_15m": 286,
"volume_30m": 286,
"volume_1h": 286,
"volume_6h": 286,
"volume_12h": 286,
"volume_24h": 286,
"top10": 5.0494,
"dev": 5.0494,
"insiders": 0,
"snipers": 0.3166,
"bundlers": {
"count": 0,
"balance": 0,
"percentage": 0
},
"riskScore": 10,
"socials": {
"twitter": "https://x.com/i/communities/1977354097570304425"
},
"fees": {
"total": 0.002086,
"totalTrading": 0.001966,
"totalTips": 0.00012
},
"tokenDetails": {
"creator": "46AxLXbx5bG3jGcT881u61v7aRoAftmtA4JBtfVyiEmv",
"tx": "58DshkoV4EeiAi5d9szUuZu1Rj8HzbK9TbPLV4RjC1defyETUJb3wVXLY2h1SnZFgQdjXJC2o59Ty44BSDNerpHm",
"time": 1760273457
}
}
],
"total": 13144556,
"pages": 13144556,
"page": 1,
"nextCursor": "WzE3NjAyNzM0NTY2NDEsIjltSG9XZm02ejJyUHdvWXZESm5iWExCcW4xS3o1dUZwaHN1WEZiTkVwdW1wIl0=",
"hasMore": true
}Solana token search API
Search Solana tokens by name, symbol, or address. Filter by liquidity, market cap, volume, holders, risk score, launchpad, and more. GET /search.
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.searchTokens({
query: 'BONK',
quoteToken: ['SOL', 'USDC'], // Only pools quoted in SOL or USDC.
limit: 10,
});
curl --request GET \
--url https://data.solanatracker.io/search \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://data.solanatracker.io/search', 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://data.solanatracker.io/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://data.solanatracker.io/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.solanatracker.io/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": [
{
"id": "1mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump_1mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump",
"name": "Search Example",
"symbol": "SEARCH",
"mint": "1mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump",
"image": "https://image.solanatracker.io/proxy?url=https%3A%2F%2Fipfs.io%2Fipfs%2Fbafkreieea4t7xuw6x52tzw3j4sl5khztxlvq6fkmmik2v4hue6gf3h6z4u",
"decimals": 6,
"hasSocials": true,
"hasCoinCommunity": true,
"communityMessages": 12,
"poolAddress": "9mHoWfm6z2rPwoYvDJnbXLBqn1Kz5uFphsuXFbNEpump",
"liquidityUsd": 11448.851629727089,
"marketCapUsd": 5598.428247103462,
"priceUsd": 0.000005598428247103462,
"lpBurn": 100,
"market": "pumpfun",
"quoteToken": "So11111111111111111111111111111111111111112",
"freezeAuthority": null,
"mintAuthority": null,
"deployer": "46AxLXbx5bG3jGcT881u61v7aRoAftmtA4JBtfVyiEmv",
"status": "default",
"createdAt": 1760273456641,
"lastUpdated": 1760273468644,
"holders": 2,
"launchpad": {
"name": "",
"url": "",
"logo": "",
"curvePercentage": 6.366677291506747,
"fee": 0.25
},
"buys": 2,
"sells": 1,
"totalTransactions": 3,
"volume": 304.8940710222087,
"volume_5m": 286,
"volume_15m": 286,
"volume_30m": 286,
"volume_1h": 286,
"volume_6h": 286,
"volume_12h": 286,
"volume_24h": 286,
"top10": 5.0494,
"dev": 5.0494,
"insiders": 0,
"snipers": 0.3166,
"bundlers": {
"count": 0,
"balance": 0,
"percentage": 0
},
"riskScore": 10,
"socials": {
"twitter": "https://x.com/i/communities/1977354097570304425"
},
"fees": {
"total": 0.002086,
"totalTrading": 0.001966,
"totalTips": 0.00012
},
"tokenDetails": {
"creator": "46AxLXbx5bG3jGcT881u61v7aRoAftmtA4JBtfVyiEmv",
"tx": "58DshkoV4EeiAi5d9szUuZu1Rj8HzbK9TbPLV4RjC1defyETUJb3wVXLY2h1SnZFgQdjXJC2o59Ty44BSDNerpHm",
"time": 1760273457
}
}
],
"total": 13144556,
"pages": 13144556,
"page": 1,
"nextCursor": "WzE3NjAyNzM0NTY2NDEsIjltSG9XZm02ejJyUHdvWXZESm5iWExCcW4xS3o1dUZwaHN1WEZiTkVwdW1wIl0=",
"hasMore": true
}SDK Example
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.searchTokens({
query: 'BONK',
quoteToken: ['SOL', 'USDC'], // Only pools quoted in SOL or USDC.
limit: 10,
});
Authorizations
API Key for authentication
Query Parameters
Search term for token symbol, name, or address
Search for all tokens matching an exact symbol
Page number for offset-based pagination
Primary page size for organic search hits (max 500, or max 100 when format=full). pages is calculated from this limit. The response data array may include up to 5 additional curated/promoted rows on top of the organic page, so data.length can be as high as limit + 5.
x <= 500Response format. Set to 'full' to return results as full token objects (same shape as /tokens/:token — includes token, pools, events, risk, buys, sells, txns, holders). When format=full, the max per-page limit is capped at 100.
full Cursor for cursor-based pagination (faster for deep pagination)
Field to sort by
liquidityUsd, marketCapUsd, priceUsd, volume, volume_5m, volume_15m, volume_30m, volume_1h, volume_6h, volume_12h, volume_24h, top10, dev, insiders, snipers, holders, buys, sells, totalTransactions, fees.total, fees.totalTrading, fees.totalTips, createdAt, lpBurn, curvePercentage, communityMessages, migrationSeconds Sort order
asc, desc Filter by image presence. true for tokens with an image, false for tokens without one. Empty image values count as no image.
Filter tokens by social presence. Set to true for tokens with socials, false for tokens without socials
Filter by exact image URL or IPFS hash. Supports full URLs or IPFS content identifiers (CID). For IPFS URLs containing '/ipfs/', only the hash/CID is used for matching (e.g., 'QmXyZ...' will match any gateway URL with that hash)
500Filter by launchpad name, case-insensitive. Comma-separated for several (e.g. pumpfun,boop,stonkfun). Pools that migrated from a launchpad keep its name, so letsbonk.fun or stonkfun also match their migrated Raydium pools.
100Filter by the pool's quote token. Comma-separated mint addresses or symbols (SOL, USDC, USDT, USD1, CASH, CBBTC, LBTC, case-insensitive), up to 20. Example: SOL,USDC.
1000Return all pools for a token if enabled
Include price change data in response
Minimum pool creation time in Unix milliseconds. To filter by when the token itself was created, use minTokenCreatedAt.
Maximum pool creation time in Unix milliseconds. To filter by when the token itself was created, use maxTokenCreatedAt.
Minimum token (mint) creation time, inclusive. Unix seconds or milliseconds. Unlike minCreatedAt, this uses when the token was created, not when the pool was.
Maximum token (mint) creation time, inclusive. Unix seconds or milliseconds.
Minimum graduation date in unix time (ms)
Maximum graduation date in unix time (ms)
Only tokens that took more than this many seconds from creation to migration. minMigrationSeconds=5 filters out tokens that migrated within 5 seconds of being created. Tokens that have not migrated do not match.
x >= 0Only tokens that migrated within this many seconds of creation, inclusive. maxMigrationSeconds=0 returns tokens created and migrated in the same block.
x >= 0Minimum liquidity in USD
Maximum liquidity in USD (capped at $100B)
Minimum market cap in USD
Maximum market cap in USD (capped at $5T)
Minimum volume in USD (for default timeframe)
Maximum volume in USD (for default timeframe)
Timeframe for volume filtering
5m, 15m, 30m, 1h, 6h, 12h, 24h Minimum number of buy transactions
Maximum number of buy transactions
Minimum number of sell transactions
Maximum number of sell transactions
Minimum total number of transactions
Maximum total number of transactions
Minimum number of token holders
Maximum number of token holders
Minimum % held by top 10 holders (0-100)
0 <= x <= 100Maximum % held by top 10 holders (0-100)
0 <= x <= 100Minimum % held by developer (0-100)
0 <= x <= 100Maximum % held by developer (0-100)
0 <= x <= 100Minimum % held by insiders (0-100)
0 <= x <= 100Maximum % held by insiders (0-100)
0 <= x <= 100Minimum % held by snipers (0-100)
0 <= x <= 100Maximum % held by snipers (0-100)
0 <= x <= 100Minimum bundler wallet count
x >= 0Maximum bundler wallet count
x >= 0Minimum % held by bundlers (0-100)
0 <= x <= 100Maximum % held by bundlers (0-100)
0 <= x <= 100Minimum token balance held by bundler wallets, in token units.
x >= 0Maximum token balance held by bundler wallets, in token units.
x >= 0Minimum risk score filter
x >= 0Maximum risk score filter
x >= 0LP token burn percentage (0-100)
0 <= x <= 100Market identifier. Supports comma-separated values for multiple markets (e.g., 'raydium,orca,pumpfun'). Single values still work as before.
Freeze authority address (use 'null' for none)
Mint authority address (use 'null' for none)
Deployer wallet address
Token creator wallet address
Token status
graduating, graduated, default Minimum bonding curve % (0-100)
0 <= x <= 100Maximum bonding curve % (0-100)
0 <= x <= 100Filter by the token's twitter link. Matches with or without https://, www. and a trailing slash.
Filter by the token's telegram link. Matches with or without https://, www. and a trailing slash.
Filter by the token's discord link. Matches with or without https://, www. and a trailing slash.
Filter by the token's website link. Matches with or without https://, www. and a trailing slash.
Filter by the token's facebook link. Matches with or without https://, www. and a trailing slash.
Filter by the token's instagram link. Matches with or without https://, www. and a trailing slash.
Filter by the token's youtube link. Matches with or without https://, www. and a trailing slash.
Filter by the token's reddit link. Matches with or without https://, www. and a trailing slash.
Filter by the token's tiktok link. Matches with or without https://, www. and a trailing slash.
Filter by the token's github link. Matches with or without https://, www. and a trailing slash.
Minimum total fees paid (in SOL)
Maximum total fees paid (in SOL)
Minimum trading fees paid (in SOL)
Maximum trading fees paid (in SOL)
Minimum priority fees/tips paid (in SOL)
Maximum priority fees/tips paid (in SOL)
Filter by Coin Communities activity. Set to true for tokens with at least one monitored community message, false for tokens with zero monitored messages.
Minimum live Coin Communities message count (inclusive)
Maximum live Coin Communities message count (inclusive)
Was this page helpful?