Batch snapshots
Market snapshots for many Solana mints in one request.
Both endpoints use https://api.tokens.xyz/v1 with an x-api-key header and the assets:read scope; see Authentication.
Both return one row per input mint, in input order, and never fail the request for an unregistered mint; the row is kept with null data. Both describe one on-chain token each. Canonical figures for the asset as a whole live on Asset detail.
POST /v1/assets/market-snapshots
Cached market snapshots for up to 250 mints.
Body
{ "mints": ["So11111111111111111111111111111111111111112", "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"] }mints or addresses (treated the same). Input is de-duplicated and capped at 250.
Response
type AssetsMarketSnapshotsResponse = Array<{
address: string;
token: {
address: string;
symbol: string;
name: string;
decimals: number;
logoURI?: string;
price: number;
liquidity: number;
volume24hUSD: number;
marketCap: number;
priceChange24hPercent: number;
priceChange1hPercent?: number;
source?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
metricsSource?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
fdv?: number;
holder?: number;
totalSupply?: number; // on-chain supply of this mint
circulatingSupply?: number; // on-chain supply of this mint
volume1hUSD?: number;
trade1h?: number;
trade24h?: number;
uniqueWallet1h?: number;
uniqueWallet24h?: number;
lastTradeAt?: number; // unix ms
asOf?: number; // unix seconds, trade-sourced rows only
lastFetchedAt?: number; // unix ms
} | null;
hasMarket: boolean;
}>;Notes
hasMarketistrueonly when the row has a positiveprice, avolume24hUSDand apriceChange24hPercent. WithhasMarket: falseand a non-nulltoken, treat the numeric fields as unknown, not zero; they default to0when the source has no value.token: nullmeans the mint is unregistered, or registered but not cached yet.- Cached for one minute.
Example
curl -sS "$API_BASE_URL/v1/assets/market-snapshots" \
-H "x-api-key: $API_KEY" \
-H "content-type: application/json" \
-d '{"mints":["So11111111111111111111111111111111111111112"]}'GET /v1/assets/variant-markets
Per-mint variant market snapshots, with execution quality, for up to 50 mints in the query string.
Query params
| Param | Type | Notes |
|---|---|---|
mints or addresses | comma-separated mints | Required. Max 50. |
Response
interface AssetsVariantMarketsResponse {
variants: Array<{
mint: string;
assetId: string | null; // null when the mint is unregistered
chain: 'solana' | null;
market: VariantMarket | null; // see Assets and variants
executionQuality: VariantExecutionQuality | null;
}>;
}VariantMarket and VariantExecutionQuality are defined in Assets and variants.
{
"variants": [
{
"mint": "So11111111111111111111111111111111111111112",
"assetId": "solana",
"chain": "solana",
"market": {
"symbol": "SOL",
"name": "Solana",
"decimals": 9,
"price": 142.31,
"liquidity": 410000000,
"metricsSource": "clickhouse_trades",
"volume1hUSD": 35000000,
"volume24hUSD": 855000000,
"trade1h": 70000,
"trade24h": 1660656,
"uniqueWallet1h": 9000,
"uniqueWallet24h": 120000,
"marketCap": 68000000000,
"priceChange24hPercent": 1.8,
"priceChange1hPercent": 0.2,
"lastTradeAt": 1780358399,
"asOf": 1780358399,
"lastFetchedAt": 1780360200000
},
"executionQuality": {
"source": "clickhouse_fill_quality",
"range": "24h",
"horizon": "5s",
"quoteMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"volume24hUSD": 855000000,
"trade24h": 1660656,
"botVolume24hUSD": 718000000,
"botTrade24h": 1200000,
"botVolumeRatio": 0.84,
"fee24hUSD": 1000,
"feeBps": 0.0117,
"flowSourceCount": 22,
"markoutPnl24hUSD": -350000,
"markoutCount": 100000,
"markoutBps": -4.09,
"executionScore": 83.25,
"isEligibleForPrimary": true,
"asOf": 1780358399,
"lastComputedAt": 1780360200000
}
}
]
}Notes
- An unregistered mint keeps its row as
{ mint, assetId: null, chain: null, market: null, executionQuality: null }. marketisnullfor a registered mint that has no cached snapshot yet.- Cached for one minute.
Example
curl -sS "$API_BASE_URL/v1/assets/variant-markets?mints=$MINT1,$MINT2" \
-H "x-api-key: $API_KEY"