Assets (collection)
Search, curated lists, mint resolution, snapshots, and aggregate risk.
All endpoints on this page are Platform API endpoints unless noted otherwise.
type VariantExecutionQuality = {
source: 'clickhouse_fill_quality';
range: '24h';
horizon: '5s';
quoteMint: string;
volume24hUSD: number;
trade24h: number;
botVolume24hUSD: number;
botTrade24h: number;
botVolumeRatio: number;
fee24hUSD: number;
feeBps: number;
flowSourceCount: number;
markoutPnl24hUSD: number | null;
markoutCount: number | null;
markoutBps: number | null;
executionScore: number;
isEligibleForPrimary: boolean;
asOf: number | null;
lastComputedAt: number;
} | null;
type StockVariantTier = 'share_redeemable' | 'cash_redeemable' | 'not_redeemable';Execution quality and primary strategy
Some Solana variants include cached fill-quality data in an executionQuality field. This is intended to help clients compare variant-level execution and routing quality. Public API routes read this data from Convex only; they do not query ClickHouse at request time.
Current coverage is cache-only and scoped to:
- curated base mints with fill-quality coverage
- USDC quote mint
24hrange5shorizon- production flow rollups only
executionScore is a 0–100 score derived from 24h fill volume, trade count, flow-source coverage, bot volume ratio, and fee bps. isEligibleForPrimary indicates whether the cached row passes freshness and activity eligibility. markout* fields are exposed as raw cached data, but they are not used for primary ranking in this phase.
Primary variant selection is configurable on asset detail, search, and curated endpoints:
primaryVariantStrategy=liquidityis the default. It selects the most liquid valid spot-like variant after 24h trade/volume sanity filtering.primaryVariantStrategy=execution_qualityopts into execution-aware selection. It uses the same activity filter, then allows cached fill quality to break close calls or override within the conservative liquidity-ratio cap.primaryVariantStrategy=stock_redeemabilityopts into redeemability-aware selection for equities and tokenized equities. It uses the same spot-like and activity filters, then comparesstockVariantTierbefore liquidity when the higher-tier variant has zero/unknown liquidity on both sides or is within5xof the more liquid variant.
All strategies preserve the same fallback order when no strategy-specific rule applies: liquidity, trust/liquidity tier, 24h volume, curated mint rank, then deterministic mint tie-breaks.
Equity variants may include stockVariantTier:
share_redeemable: provider documentation indicates redemption into the corresponding share/security entitlement.cash_redeemable: provider documentation indicates redemption for cash, stablecoin, or underlying asset value rather than direct share delivery.not_redeemable: no verified redemption path is represented.
stockVariantTier is informational API metadata for client routing and display. It is not legal, tax, accounting, or investment advice.
You can see this live on assets with multiple covered variants, for example Tesla:
curl -sS "$API_BASE_URL/v1/assets/tesla/variants" \
-H "x-api-key: $API_KEY"GET /v1/assets/search
Search assets by text query (canonical assets plus singleton Solana tokens when available).
- Auth:
x-api-key - Scope:
assets:read
Query params
q(required): search stringlimit(optional): integer (1–50), default20category(optional): must be one of the supported asset categoriesvariants=all(optional): include every known variant for each returned canonical asset. By default onlyprimaryVariantis returned.primaryVariantStrategy(optional):liquidity(default),execution_quality, orstock_redeemability
Response
interface AssetsSearchResponse {
query: string;
category: string | null;
primaryVariantStrategy: 'liquidity' | 'execution_quality' | 'stock_redeemability';
results: Array<{
assetId: string;
name?: string;
symbol?: string;
category: string;
imageUrl: string | null;
stats: null | {
price: number | null;
liquidity: number | null;
volume24hUSD: number | null;
volume30dUSD: number | null;
marketCap: number | null;
priceChange24hPercent: number | null;
priceChange1hPercent: number | null;
};
primaryVariant: null | {
variantId: string;
mint: string;
kind: string;
liquidityTier: string;
trustTier: string;
tags: string[];
issuer?: string;
issuerUrl?: string;
label?: string;
stockVariantTier?: StockVariantTier;
symbol?: string;
name?: string;
market: null | {
source?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
metricsSource?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
price: number | null;
liquidity: number | null;
volume1hUSD?: number | null;
volume24hUSD: number | null;
trade1h?: number | null;
trade24h?: number | null;
uniqueWallet1h?: number | null;
uniqueWallet24h?: number | null;
marketCap: number | null;
priceChange24hPercent: number | null;
priceChange1hPercent: number | null;
decimals: number | null;
logoURI: string | null;
lastTradeAt?: number | null;
asOf?: number | null;
lastFetchedAt: number | null;
};
executionQuality: VariantExecutionQuality;
};
variants?: Array<{
variantId: string;
mint: string;
kind: string;
liquidityTier: string;
trustTier: string;
tags: string[];
issuer?: string;
issuerUrl?: string;
label?: string;
stockVariantTier?: StockVariantTier;
symbol?: string;
name?: string;
market: null | {
source?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
metricsSource?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
price: number | null;
liquidity: number | null;
volume1hUSD?: number | null;
volume24hUSD: number | null;
trade1h?: number | null;
trade24h?: number | null;
uniqueWallet1h?: number | null;
uniqueWallet24h?: number | null;
marketCap: number | null;
priceChange24hPercent: number | null;
priceChange1hPercent: number | null;
decimals: number | null;
logoURI: string | null;
lastTradeAt?: number | null;
asOf?: number | null;
lastFetchedAt: number | null;
};
executionQuality: VariantExecutionQuality;
}>;
}>;
}Notes
stats.liquidityis the canonical on-chain aggregate across the asset’s spot-like variants (native,wrapped,bridged,stablecoin,lst,tokenized_equity,basket). If an asset has no spot-like variants, the API falls back to aggregating across all variants.primaryVariantStrategy=liquiditychoosesprimaryVariantfrom spot-like variants by highest liquidity after 24h activity filtering.primaryVariantStrategy=execution_qualitykeeps liquidity in the ranking but allows strong cached fill-quality evidence to select the better practical trading variant.primaryVariantStrategy=stock_redeemabilityapplies only to equities and tokenized equities. It favorsshare_redeemableovercash_redeemableovernot_redeemableor missing tiers, subject to the5xliquidity cap.variants=allkeepsprimaryVariantand addsvariants[], sorted by variant liquidity descending.stockVariantTieris exposed on stock-token variant objects when present, includingprimaryVariantandvariants[].- For mapped public equities, canonical stock-market data can populate
stats.price,stats.volume24hUSD, andstats.priceChange24hPercent; otherwise price fields come from the primary variant or external canonical provider. - When available,
primaryVariant.market.metricsSource="clickhouse_trades"indicates price, volume, trade-count, wallet-count, price-change,lastTradeAt, andasOffields were materialized from the internal Solana trades cache. Public API routes still read these fields from Convex. executionQualityis cached from ClickHouse fill-quality windows in Convex. Current coverage uses curated base mints, USDC quote,24hrange, and5shorizon.markout*fields are exposed as raw cached data and are not used for primary ranking yet.stats.volume30dUSDis a nullable rolling 30-day USD volume sum from cached daily candles for the canonical group. When populated, clients do not need to sum candles themselves.canonicalMarket.sourcecan becoingeckoorclickhouse_stock.- Tokens that are not part of any canonical asset may appear as singleton assets with deterministic IDs of the form
solana-<mint>(with a single Solana variant).
Example
curl -sS "$API_BASE_URL/v1/assets/search?q=bitcoin&limit=10" \
-H "x-api-key: $API_KEY"curl -sS "$API_BASE_URL/v1/assets/search?q=tesla&variants=all" \
-H "x-api-key: $API_KEY"GET /v1/assets/:assetId
Get a single canonical asset, its aggregate stats, and its selected primaryVariant.
- Auth:
x-api-key - Scope:
assets:read
Query params
mint(optional): require the response context to use a specific variant mint belonging to the assetinclude(optional): comma-separated optional expansions, such asprofile,ohlcv, ormarketsvariantsMode=all(optional): use the expanded variant view where supportedprimaryVariantStrategy(optional):liquidity(default),execution_quality, orstock_redeemability
Notes
asset.primaryVariant.executionQualityis included when cached fill-quality data exists for the selected primary variant.asset.primaryVariant.stockVariantTieris included for stock-token variants when present.asset.primaryVariantStrategyechoes the strategy used to selectprimaryVariant.asset.variantGroups.*[].executionQualityis included on covered variants. This is the easiest way to compare execution quality across duplicate tokenized-equity or RWA variants.asset.variantGroups.tokenizedEquity[].stockVariantTieris included when present and can be used to distinguish redeemability tiers. This metadata is informational, not legal or investment advice.- Public API routes read execution quality from Convex only. They do not query ClickHouse at request time.
Example response excerpt
{
"asset": {
"assetId": "tesla",
"primaryVariantStrategy": "execution_quality",
"primaryVariant": {
"variantId": "tesla:xStock",
"mint": "XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB",
"label": "xStock",
"stockVariantTier": "cash_redeemable",
"executionQuality": {
"source": "clickhouse_fill_quality",
"range": "24h",
"horizon": "5s",
"quoteMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"volume24hUSD": 47017356.73,
"trade24h": 8503,
"botVolume24hUSD": 907765.5,
"botTrade24h": 5635,
"botVolumeRatio": 0.0193,
"fee24hUSD": 49.61,
"feeBps": 0.0106,
"flowSourceCount": 12,
"markoutPnl24hUSD": -15849.29,
"markoutCount": 8503,
"markoutBps": -3.3709,
"executionScore": 99.2412,
"isEligibleForPrimary": true,
"asOf": 1780444799,
"lastComputedAt": 1780458483037
}
}
}
}Example
curl -sS "$API_BASE_URL/v1/assets/tesla" \
-H "x-api-key: $API_KEY"GET /v1/assets/:assetId/variants
List variants for a canonical asset.
- Auth:
x-api-key - Scope:
assets:read
Query params
mint(optional): filter to one variant mint that belongs to the assetkind(optional): filter by variant kindliquidityTier(optional): filter by liquidity tierstockVariantTier(optional):share_redeemable,cash_redeemable, ornot_redeemablevariantsMode=all(optional): disable default narrowing where a specialized view existssortBy(optional):liquidity(default),execution_quality, orstock_redeemability
Notes
- Each variant row includes
executionQualitywhen fill-quality data is cached for that mint. - Each stock-token variant row includes
stockVariantTierwhen present. sortBy=execution_qualityputs variants with cached execution quality first, then eligible rows, then higherexecutionScore, then fill-quality volume, then liquidity/volume fallbacks.sortBy=stock_redeemabilitysortsshare_redeemablevariants first, thencash_redeemable, thennot_redeemableor missing tiers, with liquidity fallbacks inside each tier.executionQuality.executionScoreis useful for UI badges or comparison states. UseprimaryVariantStrategy=execution_qualityon asset detail/search/curated endpoints when you want the API to use that signal for primary selection.stockVariantTieris descriptive provider metadata and should not be treated as legal or investment advice.
Example response excerpt
{
"assetId": "tesla",
"sortBy": "execution_quality",
"variants": [
{
"mint": "XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB",
"label": "xStock",
"stockVariantTier": "cash_redeemable",
"executionQuality": {
"source": "clickhouse_fill_quality",
"range": "24h",
"horizon": "5s",
"quoteMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"volume24hUSD": 47017356.73,
"trade24h": 8503,
"botVolumeRatio": 0.0193,
"feeBps": 0.0106,
"flowSourceCount": 12,
"executionScore": 99.2412,
"isEligibleForPrimary": true,
"asOf": 1780444799,
"lastComputedAt": 1780458483037
}
},
{
"mint": "KeGv7bsfR4MheC1CkmnAVceoApjrkvBhHYjWb67ondo",
"label": "Ondo",
"stockVariantTier": "cash_redeemable",
"executionQuality": {
"source": "clickhouse_fill_quality",
"range": "24h",
"horizon": "5s",
"quoteMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"volume24hUSD": 46058844.77,
"trade24h": 2755,
"botVolumeRatio": 0,
"feeBps": 0,
"flowSourceCount": 1,
"executionScore": 82.6487,
"isEligibleForPrimary": true,
"asOf": 1780444799,
"lastComputedAt": 1780458362082
}
}
]
}Example
curl -sS "$API_BASE_URL/v1/assets/tesla/variants" \
-H "x-api-key: $API_KEY"curl -sS "$API_BASE_URL/v1/assets/spacex/variants?stockVariantTier=share_redeemable&sortBy=stock_redeemability" \
-H "x-api-key: $API_KEY"GET /v1/assets/resolve
Resolve a Solana mint (or an asset reference) to its canonical assetId + variant details.
-
If the mint is part of a canonical asset, the returned
assetIdis the canonical grouping slug (for example:usd,solana,tesla). Otherwise the API returns a deterministic singleton ID of the formsolana-<mint>. -
refcan be anassetId, alias, raw mint, orsolana-<mint>. Known mint refs reverse-resolve to their canonical group, soref=solana-EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vreturnsassetId: "usd". -
Auth:
x-api-key -
Scope:
assets:read
Query params
mint(optional): Solana mint address (base58)ref(optional): asset reference string (anassetId, alias, mint, orsolana-<mint>)
One of mint or ref is required. If both are provided, mint takes precedence.
Response
interface AssetsResolveResponse {
assetId: string;
resolvedBy?: 'assetId' | 'alias' | 'mint' | 'singletonMint' | 'registry' | 'sanctum' | 'singleton';
mint?: string | null;
asset: {
assetId: string;
name: string | null;
symbol: string | null;
category: string;
aliases: string[];
};
variant: {
mint: string;
chain: string;
kind: string;
liquidityTier: string;
trustTier: string;
tags: string[];
issuer?: string;
issuerUrl?: string;
label?: string;
} | null;
}{
"assetId": "usd",
"resolvedBy": "singletonMint",
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"asset": {
"assetId": "usd",
"name": "US Dollar",
"symbol": "USD",
"category": "stablecoin",
"aliases": []
},
"variant": {
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"chain": "solana",
"kind": "native",
"liquidityTier": "tier3",
"trustTier": "tier3",
"tags": []
}
}Example
curl -sS "$API_BASE_URL/v1/assets/resolve?ref=solana-$MINT" \
-H "x-api-key: $API_KEY"curl -sS "$API_BASE_URL/v1/assets/resolve?ref=usd" \
-H "x-api-key: $API_KEY"GET /v1/assets/trending
Get ranked trending curated Solana assets from the Convex cache.
- Auth:
x-api-key - Scope:
assets:read
Query params
category(optional): one ofcrypto,stablecoin,lst,rwa,commodity,equity,etf, orindexlimit(optional): integer (1–50), default50offset(optional): zero-based result offset, default0
Notes
- This endpoint reads the cached top 50 Convex rows only. Public API routes do not query ClickHouse.
- Trending rows are individual mints, not canonical asset aggregates.
imageUrlprefers the mint-level token logo cached with that row. - Trending v1 is computed from successful direct USD-stable Solana trades only.
- Native/wrapped SOL and stablecoin assets are excluded from the ranked trending set because they dominate Solana routing and stable-pair liquidity.
category=stablecoinis accepted for schema compatibility but currently returns an empty list. - SOL-routed pricing and buy/sell imbalance are not included in this phase.
trending.scoreis a balanced momentum score based on 5m/15m/1h activity, acceleration versus longer windows, 1h price movement, and trade recency.market.asOfis the shared ClickHouse trade timestamp used for the run, expressed as unix seconds.market.lastTradeAtis the most recent direct-stable trade timestamp for that mint, also unix seconds.
Response
interface AssetsTrendingResponse {
trending: Array<{
rank: number;
assetId: string;
mint: string;
symbol: string;
name: string;
decimals: number;
category: string;
imageUrl: string | null;
market: {
source: 'clickhouse_trades';
metricsSource: 'clickhouse_trades';
price: number | null;
volume5mUSD: number;
volume15mUSD: number;
volume1hUSD: number;
volume6hUSD: number;
volume24hUSD: number;
trade5m: number;
trade15m: number;
trade1h: number;
trade6h: number;
trade24h: number;
uniqueWallet5m: number;
uniqueWallet1h: number;
uniqueWallet24h: number;
priceChange1hPercent: number | null;
priceChange24hPercent: number | null;
lastTradeAt: number | null;
asOf: number | null;
};
trending: {
score: number;
scoringVersion: string;
};
}>;
meta: {
limit: number;
offset: number;
total: number; // at most 50 in the current cached set
asOf: number | null;
scoringVersion: string;
};
}Example response
{
"trending": [
{
"rank": 1,
"assetId": "hyperliquid",
"mint": "98sM...",
"symbol": "HYPE",
"name": "HYPE (Wormhole)",
"decimals": 8,
"category": "crypto",
"imageUrl": "https://...",
"market": {
"source": "clickhouse_trades",
"metricsSource": "clickhouse_trades",
"price": 36.42,
"volume5mUSD": 98234.12,
"volume15mUSD": 275001.44,
"volume1hUSD": 910442.8,
"volume6hUSD": 5123401.5,
"volume24hUSD": 18420012.9,
"trade5m": 211,
"trade15m": 690,
"trade1h": 2314,
"trade6h": 12602,
"trade24h": 50711,
"uniqueWallet5m": 82,
"uniqueWallet1h": 579,
"uniqueWallet24h": 6240,
"priceChange1hPercent": 2.13,
"priceChange24hPercent": 5.88,
"lastTradeAt": 1780348384,
"asOf": 1780348387
},
"trending": {
"score": 72.1482,
"scoringVersion": "solana-direct-stable-v1"
}
}
],
"meta": {
"limit": 10,
"offset": 0,
"total": 50,
"asOf": 1780348387,
"scoringVersion": "solana-direct-stable-v1"
}
}Example
curl -sS "$API_BASE_URL/v1/assets/trending?limit=10" \
-H "x-api-key: $API_KEY"curl -sS "$API_BASE_URL/v1/assets/trending?category=equity&limit=10" \
-H "x-api-key: $API_KEY"GET /v1/assets/curated
Get curated assets from a list.
- Auth:
x-api-key - Scope:
assets:read
Query params
list(optional): curated list id, orall(defaultall)groupBy(optional):asset(default) ormintlimit(optional): opt into pagination with this page size (default250whenoffsetis provided, max500)offset(optional): opt into pagination from this zero-based result offsetvariantsMode=all(optional): disable the default Solana LST liquidity filter forgroupBy=mintprimaryVariantStrategy(optional):liquidity(default),execution_quality, orstock_redeemability
Notes
- Results are sorted by
stats.volume24hUSDdescending when available. list=lstsis backed by the same dynamic, capped Solana yield-variant set used by the variants API, rather than a fixed static mint list.list=allincludes that same dynamic LST membership.- For Solana LST mint rows, the default response only includes active LSTs with at least
$250kliquidity. PassvariantsMode=allto return all active LST rows. groupBy=mintexpands the response to one row per variant mint.imageUrlis curated canonical imagery (including storage-backed URLs when configured).primaryVariant.market.logoURIis a best-effort per-token icon from indexed/cache sources and may benull(the server may fall back toimageUrlwhen missing).stats.liquidity,stats.volume24hUSD, andstats.volume30dUSDare canonical aggregates across the asset’s spot-like variants (fallback to all variants if none exist). IngroupBy=mint,primaryVariant.marketis mint-specific butstatsremains canonical for the asset.- When available,
primaryVariant.market.metricsSource="clickhouse_trades"means the mint-specific market metrics were materialized from direct USD-stable Solana trades into Convex. primaryVariantStrategy=liquidityis the default conservative selector. UseprimaryVariantStrategy=execution_qualitywhen you want the primary variant to account for cached fill-quality evidence. UseprimaryVariantStrategy=stock_redeemabilitywhen equity and tokenized-equity primary selection should account forstockVariantTier.primaryVariant.executionQualityis cached from ClickHouse fill-quality windows and is exposed regardless of selected strategy.primaryVariant.stockVariantTieris included for stock-token variants when present. It is informational metadata, not legal or investment advice.
Response
interface AssetsCuratedResponse {
listId: string;
primaryVariantStrategy: 'liquidity' | 'execution_quality' | 'stock_redeemability';
pagination?: {
offset: number;
limit: number;
total: number;
hasMore: boolean;
nextOffset: number | null;
};
assets: Array<{
assetId: string;
name?: string;
symbol?: string;
category: string;
imageUrl: string | null;
stats: null | {
price: number | null;
liquidity: number | null;
volume24hUSD: number | null;
volume30dUSD: number | null;
marketCap: number | null;
priceChange24hPercent: number | null;
priceChange1hPercent: number | null;
};
primaryVariant: null | {
variantId: string;
mint: string;
kind: string;
liquidityTier: string;
trustTier: string;
tags: string[];
issuer?: string;
issuerUrl?: string;
label?: string;
stockVariantTier?: StockVariantTier;
symbol?: string;
name?: string;
market: null | {
source?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
metricsSource?: 'birdeye' | 'rwa_xyz' | 'clickhouse_trades';
price: number | null;
liquidity: number | null;
volume1hUSD?: number | null;
volume24hUSD: number | null;
trade1h?: number | null;
trade24h?: number | null;
uniqueWallet1h?: number | null;
uniqueWallet24h?: number | null;
marketCap: number | null;
priceChange24hPercent: number | null;
priceChange1hPercent: number | null;
decimals: number | null;
logoURI: string | null;
lastTradeAt?: number | null;
asOf?: number | null;
lastFetchedAt: number | null;
};
executionQuality: VariantExecutionQuality;
};
}>;
}Notes:
- If
groupBy=mint,assets[]becomes “one row per mint” andprimaryVariantis always present for returned rows. - Pagination is opt-in. Pass
limitoroffsetto receivepagination, then usepagination.nextOffsetwith the samelistandgroupByparams to fetch the next page. - Compatibility: clients that previously expected a complete curated list from one request still receive all matching rows unless they opt into pagination. Clients that need all active LST mint rows should add
variantsMode=all.
Example
curl -sS "$API_BASE_URL/v1/assets/curated?list=all&groupBy=asset" \
-H "x-api-key: $API_KEY"curl -sS "$API_BASE_URL/v1/assets/curated?list=all&groupBy=asset&limit=250" \
-H "x-api-key: $API_KEY"curl -sS "$API_BASE_URL/v1/assets/curated?list=lsts&groupBy=mint&variantsMode=all" \
-H "x-api-key: $API_KEY"POST /v1/assets/market-snapshots
Batch lookup cached market snapshots for up to 250 mints.
- Auth:
x-api-key - Scope:
assets:read - Body: JSON
Body
Either mints or addresses (both treated the same).
{ "mints": ["So11111111111111111111111111111111111111112"] }Notes
- Input is de-duped and capped at 250 addresses.
- Returns an array (Convex-backed) of token search rows for those addresses.
Response
This endpoint returns an array of token rows. The exact row shape can evolve, but it is safe to treat each entry as “token metadata + market snapshot data” keyed by the requested address.
When a row has metricsSource="clickhouse_trades", cached direct-stable Solana trade fields may include volume1hUSD, trade1h, trade24h, uniqueWallet1h, uniqueWallet24h, lastTradeAt, and asOf in addition to existing price/volume/change fields.
type AssetsMarketSnapshotsResponse = Array<unknown>;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
Batch lookup per-mint variant market snapshots (best-effort; may be null if not cached).
- Auth:
x-api-key - Scope:
assets:read
Query params
mintsoraddresses: comma-separated list (max 50)
Response shape (high level)
variants[]where each entry contains:mintassetId(when variant is known)chain(when variant is known)market(market snapshot, ornullif missing)executionQuality(fill-quality snapshot, ornullif missing)
Response
interface AssetsVariantMarketsResponse {
variants: Array<{
mint: string;
assetId: string | null;
chain: string | null;
market: Record<string, unknown> | null;
executionQuality: VariantExecutionQuality;
}>;
}{
"variants": [
{
"mint": "So11111111111111111111111111111111111111112",
"assetId": "solana",
"chain": "solana",
"market": {
"symbol": "SOL",
"name": "Solana",
"decimals": 9,
"price": 0,
"liquidity": 0,
"metricsSource": "clickhouse_trades",
"volume1hUSD": 0,
"volume24hUSD": 0,
"trade1h": 0,
"trade24h": 0,
"uniqueWallet1h": 0,
"uniqueWallet24h": 0,
"volume30dUSD": null,
"marketCap": 0,
"priceChange24hPercent": 0,
"priceChange1hPercent": 0,
"lastTradeAt": 0,
"asOf": 0,
"lastFetchedAt": 0
},
"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
}
}
]
}Example
curl -sS "$API_BASE_URL/v1/assets/variant-markets?mints=$MINT1,$MINT2" \
-H "x-api-key: $API_KEY"GET /v1/assets/risk-summary
Compute a quick market-based “risk summary” for a mint.
- Auth:
x-api-key - Scope: requires either
assets:readorassets:risk:read
Query params
mint(required) oraddress(alias): Solana mint
Notes
- This endpoint requires a cached market snapshot; if missing you’ll get an “Insufficient Data” response.
Response
interface AssetsRiskSummaryResponse {
score: number;
grade: string;
label: string;
tone: 'info' | 'success' | 'warning' | 'danger';
isTrustedLaunch: boolean;
caps: Array<unknown>;
hasInsufficientData: boolean;
insufficientDataReason?: string;
}{
"score": 0,
"grade": "C",
"label": "Insufficient Data",
"tone": "info",
"isTrustedLaunch": false,
"caps": [],
"hasInsufficientData": true,
"insufficientDataReason": "Market snapshot not available in cache"
}Example
curl -sS "$API_BASE_URL/v1/assets/risk-summary?mint=$MINT" \
-H "x-api-key: $API_KEY"